提出 #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
結果
AC × 3
AC × 21
セット名 テストケース
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