提出 #19470579
ソースコード 拡げる
#include <bits/stdc++.h>
typedef long long lint;
using namespace std;
lint h, w, k;
const lint mod = 998244353;
lint two_third;
// a^n mod pを計算 O(log n)
long long pow_mod(long long a, long long n, long long p) {
if (n == 0) return 1;
if (n & 1) return pow_mod(a, n - 1, p) * a % p;
long long temp = pow_mod(a, n / 2, p);
return temp * temp % p;
}
// Z_pでのaの逆元を計算 O(log p)
// depend:pow_mod
long long inv_mod(long long a, long long p) {
return pow_mod(a, p - 2, p);
}
bool is_ok(lint x, lint y) {
return x >= 0 && x < h && y >= 0 && y < w;
}
int main() {
cin >> h >> w >> k;
vector<string> s(h, string(w, 'A'));
for (int i = 0; i < k; i++) {
lint x, y;
char c;
cin >> x >> y >> c;
x--, y--;
s[x][y] = c;
}
lint two_third = 2 * inv_mod(3, mod);
vector<vector<lint>> dp(h, vector<lint>(w, 0));
dp[0][0] = pow_mod(3, h * w - k, mod);
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (s[i][j] == 'A') {
if (is_ok(i + 1, j)) {
dp[i + 1][j] = (dp[i + 1][j] + dp[i][j] * two_third) % mod;
}
if (is_ok(i, j + 1)) {
dp[i][j + 1] = (dp[i][j + 1] + dp[i][j] * two_third) % mod;
}
}
if (s[i][j] == 'X' || s[i][j] == 'D') {
if (is_ok(i + 1, j)) {
dp[i + 1][j] = (dp[i + 1][j] + dp[i][j]) % mod;
}
}
if (s[i][j] == 'X' || s[i][j] == 'R') {
if (is_ok(i, j + 1)) {
dp[i][j + 1] = (dp[i][j + 1] + dp[i][j]) % mod;
}
}
}
}
cout << dp[h - 1][w - 1] << endl;
}
提出情報
| 提出日時 |
|
| 問題 |
C - Robot on Grid |
| ユーザ |
mijinko |
| 言語 |
C++ (GCC 9.2.1) |
| 得点 |
500 |
| コード長 |
1842 Byte |
| 結果 |
AC |
| 実行時間 |
373 ms |
| メモリ |
223372 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
500 / 500 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample_01.txt, sample_02.txt, sample_03.txt |
| All |
random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, sample_01.txt, sample_02.txt, sample_03.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| random_01.txt |
AC |
8 ms |
3828 KiB |
| random_02.txt |
AC |
6 ms |
3760 KiB |
| random_03.txt |
AC |
3 ms |
3764 KiB |
| random_04.txt |
AC |
2 ms |
3624 KiB |
| random_05.txt |
AC |
372 ms |
223360 KiB |
| random_06.txt |
AC |
369 ms |
223332 KiB |
| random_07.txt |
AC |
373 ms |
223344 KiB |
| random_08.txt |
AC |
371 ms |
223336 KiB |
| random_09.txt |
AC |
369 ms |
223372 KiB |
| random_10.txt |
AC |
370 ms |
223284 KiB |
| random_11.txt |
AC |
4 ms |
3504 KiB |
| random_12.txt |
AC |
3 ms |
3616 KiB |
| random_13.txt |
AC |
2 ms |
3588 KiB |
| random_14.txt |
AC |
3 ms |
3656 KiB |
| random_15.txt |
AC |
2 ms |
3612 KiB |
| random_16.txt |
AC |
91 ms |
30664 KiB |
| random_17.txt |
AC |
181 ms |
98348 KiB |
| random_18.txt |
AC |
281 ms |
223336 KiB |
| sample_01.txt |
AC |
2 ms |
3636 KiB |
| sample_02.txt |
AC |
2 ms |
3552 KiB |
| sample_03.txt |
AC |
291 ms |
223308 KiB |