提出 #18440335


ソースコード 拡げる

#include <atcoder/modint>
#include <iostream>
#include <vector>
#include <string>

using namespace std;

using mint = atcoder::modint998244353;

void solve() {
    string s;
    int m;
    cin >> s >> m;
    int n = s.length();

    auto dp = vector(2, vector(n + 1, vector(n + 1, vector(n + 1, mint(0)))));
    // Tの次の文字, Sの今見てるindex, 1の前借り数, 操作回数
    dp[0][0][0][0] = dp[1][0][0][0] = 1;

    for (int i = 0; i < n; ++i) {
        for (int j = 0; j <= n; ++j) {
            for (int k = 0; k <= n; ++k) {
                if (s[i] == '0') {
                    // 0-0: スキップ
                    if (i < n) {
                        for (int nc = 0; nc < 2; ++nc) {
                            dp[nc][i + 1][j][k] += dp[0][i][j][k];
                        }
                    }

                    // 0-1: 1を貰う
                    if (j < n && k < n) {
                        for (int nc = 0; nc < 2; ++nc) {
                            dp[nc][i][j + 1][k + 1] += dp[1][i][j][k];
                        }
                    }
                } else {
                    // 1-0: 1を消す
                    // このときだけ相手の文字は0のまま
                    if (i < n && j > 0) {
                        dp[0][i + 1][j - 1][k] += dp[0][i][j][k];
                    }

                    // 1-1: スキップ
                    if (i < n) {
                        for (int nc = 0; nc < 2; ++nc) {
                            dp[nc][i + 1][j][k] += dp[1][i][j][k];
                        }
                    }
                }
            }
        }
    }

    mint ans = 0;
    for (int k = 0; k <= n && k <= m; ++k) {
        ans += dp[0][n][0][k];
    }
    cout << ans.val() << "\n";
}

int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);

    solve();

    return 0;
}

提出情報

提出日時
問題 C - Shift
ユーザ Tiramister
言語 C++ (GCC 9.2.1)
得点 800
コード長 1946 Byte
結果 AC
実行時間 374 ms
メモリ 332700 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 800 / 800
結果
AC × 3
AC × 39
セット名 テストケース
Sample s1.txt, s2.txt, s3.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, s1.txt, s2.txt, s3.txt
ケース名 結果 実行時間 メモリ
01.txt AC 358 ms 330564 KiB
02.txt AC 347 ms 328368 KiB
03.txt AC 344 ms 322016 KiB
04.txt AC 354 ms 332628 KiB
05.txt AC 352 ms 330512 KiB
06.txt AC 353 ms 328428 KiB
07.txt AC 347 ms 322040 KiB
08.txt AC 355 ms 332600 KiB
09.txt AC 374 ms 330412 KiB
10.txt AC 333 ms 328372 KiB
11.txt AC 342 ms 322012 KiB
12.txt AC 355 ms 332652 KiB
13.txt AC 354 ms 330532 KiB
14.txt AC 348 ms 328380 KiB
15.txt AC 336 ms 322060 KiB
16.txt AC 346 ms 332648 KiB
17.txt AC 373 ms 330528 KiB
18.txt AC 349 ms 328360 KiB
19.txt AC 328 ms 322080 KiB
20.txt AC 335 ms 332696 KiB
21.txt AC 333 ms 330348 KiB
22.txt AC 337 ms 328420 KiB
23.txt AC 363 ms 321904 KiB
24.txt AC 372 ms 332576 KiB
25.txt AC 334 ms 330436 KiB
26.txt AC 330 ms 328304 KiB
27.txt AC 344 ms 322100 KiB
28.txt AC 356 ms 332660 KiB
29.txt AC 4 ms 3600 KiB
30.txt AC 2 ms 3596 KiB
31.txt AC 3 ms 3604 KiB
32.txt AC 2 ms 3628 KiB
33.txt AC 3 ms 3964 KiB
34.txt AC 336 ms 332552 KiB
35.txt AC 335 ms 332700 KiB
36.txt AC 3 ms 3604 KiB
s1.txt AC 2 ms 3612 KiB
s2.txt AC 2 ms 3476 KiB
s3.txt AC 13 ms 7304 KiB