Submission #54678108


Source Code Expand

// LUOGU_RID: 162468012
#include <bits/stdc++.h>
using namespace std;
const int P = 998244353; 

inline void add(int &x, int k) { x += k; x -= x >= P ? P : 0; }

int n; 
char a[305]; 
int dp[305][305][305]; // 保留后缀 [i + 1, n]
bool ok[305][305][305]; 

int main(void) {
    ios::sync_with_stdio(0); 
    cin >> a + 1; n = strlen(a + 1); 
    ok[0][0][0] = 1; 
    for (int i = 1; i <= n; ++i) for (int j = n; j >= 0; --j) for (int k = n; k >= 0; --k) {
        ok[i][j][k] |= ok[i - 1][j][k] | ok[i][j + 1][k] | ok[i][j][k + 1]; // 自己干掉自己,放在序列开头
        if (j && i >= 2 && (a[i] == '0' || a[i - 1] == '0')) ok[i][j][k] |= ok[i - 2][j - 1][k]; 
        if (k && i >= 2 && (a[i] == '1' || a[i - 1] == '1')) ok[i][j][k] |= ok[i - 2][j][k - 1]; 
        if (j && a[i] == '0') ok[i][j][k] |= ok[i - 1][j - 1][k + 1]; // 另一种是 ok[i - 1][j][k]
        if (k && a[i] == '1') ok[i][j][k] |= ok[i - 1][j + 1][k - 1]; 
    }
    dp[n][0][0] = 1; 
    for (int i = n; i >= 1; --i) for (int j = 0; j <= n; ++j) for (int k = 0; k <= n; ++k) if (dp[i][j][k]) {
        add(dp[i - 1][j][k], dp[i][j][k]); 
        if (a[i] == '1') add(dp[i][j + 1][k], dp[i][j][k]); 
        else add(dp[i][j][k + 1], dp[i][j][k]); 
    }
    int ans = -1; // 空串不算
    for (int i = 0; i <= n; ++i) for (int j = 0; j <= n; ++j) for (int k = 0; k <= n; ++k) add(ans, ok[i][j][k] ? dp[i][j][k] : 0); 
    cout << (ans + P) % P << "\n"; 
    return 0;
}

Submission Info

Submission Time
Task D - Secret Passage
User james1BadCreeper
Language C++ 17 (gcc 12.2)
Score 1100
Code Size 1496 Byte
Status AC
Exec Time 301 ms
Memory 140100 KiB

Compile Error

Main.cpp: In function ‘int main()’:
Main.cpp:15:14: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
   15 |     cin >> a + 1; n = strlen(a + 1);
      |            ~~^~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1100 / 1100
Status
AC × 3
AC × 27
Set Name Test Cases
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, s1.txt, s2.txt, s3.txt
Case Name Status Exec Time Memory
01.txt AC 296 ms 139140 KiB
02.txt AC 293 ms 138480 KiB
03.txt AC 291 ms 137544 KiB
04.txt AC 301 ms 140100 KiB
05.txt AC 298 ms 139296 KiB
06.txt AC 292 ms 137988 KiB
07.txt AC 291 ms 136800 KiB
08.txt AC 296 ms 137656 KiB
09.txt AC 179 ms 32208 KiB
10.txt AC 269 ms 138176 KiB
11.txt AC 292 ms 137176 KiB
12.txt AC 301 ms 139972 KiB
13.txt AC 295 ms 139240 KiB
14.txt AC 291 ms 138388 KiB
15.txt AC 281 ms 129816 KiB
16.txt AC 290 ms 140024 KiB
17.txt AC 289 ms 136272 KiB
18.txt AC 291 ms 135996 KiB
19.txt AC 1 ms 3400 KiB
20.txt AC 1 ms 3416 KiB
21.txt AC 1 ms 3652 KiB
22.txt AC 1 ms 3532 KiB
23.txt AC 1 ms 3540 KiB
24.txt AC 1 ms 3512 KiB
s1.txt AC 1 ms 3508 KiB
s2.txt AC 1 ms 3568 KiB
s3.txt AC 11 ms 13012 KiB