提出 #28081036
ソースコード 拡げる
#include <bits/stdc++.h>
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define rep2(i,k,n) for (int i = (k); i < (n); ++i)
using namespace std;
using ll = long long;
using P = pair<int,int>;
// using P = pair<ll,ll>;
// const ll INF = (ll)1e18;
// const int INF = (int)1e9+7;
template<typename T>
void chmin(T &a, T b) { a = min(a, b); }
template<typename T>
void chmax(T &a, T b) { a = max(a, b); }
const ll MOD = 998244353;
using Matrix = vector<vector<ll>>;
Matrix transitionMatrix(ll H, ll W) {
return {
{H+W-4, W-1, H-1, 0},
{1, H-2, 0, H-1},
{1, 0, W-2, W-1},
{0, 1, 1, 0},
};
}
Matrix mulMat(Matrix A, Matrix B) {
Matrix C(4, vector<ll>(4));
rep(i,4) {
rep(j,4) {
rep(k,4) {
C[i][j] += A[i][k] * B[k][j];
C[i][j] %= MOD;
}
}
}
return C;
}
Matrix expMatMod(Matrix A, ll K) {
Matrix ans = Matrix(4, vector<ll>(4, 0));
Matrix mat = Matrix(4, vector<ll>(4, 0));
rep(i,4) ans[i][i] = 1;
rep(i,4) mat[i][i] = 1;
for (ll i = 0;; i++) {
if (i == 0) mat = A;
else mat = mulMat(mat, mat);
if (K&1) ans = mulMat(ans, mat);
K/=2;
if (K == 0) break;
}
return ans;
}
void solve() {
ll H, W, K;
cin >> H >> W >> K;
ll x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
Matrix trans = transitionMatrix(H, W);
vector<ll> state(4, 0);
int stateidx = ((x1==x2) << 1) + (y1==y2);
state[stateidx] = 1;
Matrix A = expMatMod(trans, K);
// vector<ll> ans(4, 0);
// rep(i,4) {
// rep(j,4) {
// ans[i] += A[i][j] * state[j];
// }
// }
//
// cout << ans[3] << endl;
cout << A[3][stateidx] << endl;
}
int main() {
solve();
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
E - Rook Path |
| ユーザ |
goropikari |
| 言語 |
C++ (GCC 9.2.1) |
| 得点 |
500 |
| コード長 |
1988 Byte |
| 結果 |
AC |
| 実行時間 |
8 ms |
| メモリ |
3604 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
500 / 500 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
example_00.txt, example_01.txt, example_02.txt |
| All |
example_00.txt, example_01.txt, example_02.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| example_00.txt |
AC |
8 ms |
3492 KiB |
| example_01.txt |
AC |
2 ms |
3556 KiB |
| example_02.txt |
AC |
2 ms |
3420 KiB |
| test_00.txt |
AC |
2 ms |
3436 KiB |
| test_01.txt |
AC |
4 ms |
3600 KiB |
| test_02.txt |
AC |
3 ms |
3496 KiB |
| test_03.txt |
AC |
2 ms |
3488 KiB |
| test_04.txt |
AC |
2 ms |
3600 KiB |
| test_05.txt |
AC |
2 ms |
3528 KiB |
| test_06.txt |
AC |
2 ms |
3604 KiB |
| test_07.txt |
AC |
2 ms |
3440 KiB |
| test_08.txt |
AC |
2 ms |
3600 KiB |
| test_09.txt |
AC |
3 ms |
3600 KiB |
| test_10.txt |
AC |
2 ms |
3420 KiB |
| test_11.txt |
AC |
2 ms |
3460 KiB |
| test_12.txt |
AC |
2 ms |
3540 KiB |
| test_13.txt |
AC |
2 ms |
3420 KiB |
| test_14.txt |
AC |
2 ms |
3536 KiB |
| test_15.txt |
AC |
2 ms |
3548 KiB |
| test_16.txt |
AC |
3 ms |
3492 KiB |
| test_17.txt |
AC |
2 ms |
3596 KiB |
| test_18.txt |
AC |
3 ms |
3488 KiB |
| test_19.txt |
AC |
2 ms |
3488 KiB |
| test_20.txt |
AC |
3 ms |
3496 KiB |
| test_21.txt |
AC |
2 ms |
3460 KiB |
| test_22.txt |
AC |
2 ms |
3420 KiB |