Submission #14846674
Source Code Expand
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 300;
const int MOD = 998244353;
inline int add(int x, int y) {x += y; return x >= MOD ? x - MOD : x;}
inline int sub(int x, int y) {x -= y; return x < 0 ? x + MOD : x;}
inline int mul(int x, int y) {return (int)(1LL * x * y % MOD);}
int pow_mod(int b, int p) {
int ret = 1;
for(int i=p;i;i>>=1,b=mul(b,b))
if( i & 1 ) ret = mul(ret, b);
return ret;
}
int comb[2*MAXN + 5][2*MAXN + 5];
int dp[MAXN + 5][MAXN + 5][MAXN + 5];
bool f[MAXN + 5][MAXN + 5][MAXN + 5];
char s[MAXN + 5]; int n;
int main() {
for(int i=0;i<=2*MAXN;i++) {
comb[i][0] = 1;
for(int j=1;j<=i;j++)
comb[i][j] = add(comb[i-1][j], comb[i-1][j-1]);
}
scanf("%s", s), n = strlen(s);
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
dp[n][i][j] = comb[i + j][i];
for(int i=n-1;i>=0;i--) {
for(int j=0;j<=i;j++) {
for(int k=0;k<=i;k++) {
dp[i][j][k] = add(dp[i][j][k], dp[i + 1][j][k]);
if( s[i] == '0' && k ) dp[i][j][k] = add(dp[i][j][k], dp[i][j][k - 1]);
if( s[i] == '1' && j ) dp[i][j][k] = add(dp[i][j][k], dp[i][j - 1][k]);
}
}
}
f[0][0][0] = true;
for(int i=0;i<=n;i++) {
for(int j=i;j>=0;j--) {
for(int k=i;k>=0;k--) {
if( j && j + k >= 2 ) f[i][j - 1][k] |= f[i][j][k];
if( k && j + k >= 2 ) f[i][j][k - 1] |= f[i][j][k];
if( i + 1 <= n ) {
if( j && s[i] == '1' ) f[i + 1][j - 1][k + 1] |= f[i][j][k];
if( k && s[i] == '0' ) f[i + 1][j + 1][k - 1] |= f[i][j][k];
if( j + k ) f[i + 1][j][k] |= f[i][j][k];
}
if( i + 2 <= n ) {
if( s[i] == '0' || s[i + 1] == '0' ) f[i + 2][j + 1][k] |= f[i][j][k];
if( s[i] == '1' || s[i + 1] == '1' ) f[i + 2][j][k + 1] |= f[i][j][k];
}
}
}
}
int ans = 0;
for(int i=n;i>=0;i--) {
for(int j=i;j>=0;j--) {
for(int k=i;k>=0;k--) {
// printf("%d %d %d : %d %d\n", i, j, k, f[i][j][k], dp[i][j][k]);
if( !f[i][j][k] ) continue;
ans = add(ans, dp[i][j][k]);
int cnt[2] = {};
for(int l=i-1;l>=0;l--) {
cnt[s[l] - '0']++;
if( j < cnt[0] || k < cnt[1] ) break;
f[l][j - cnt[0]][k - cnt[1]] = false;
}
}
}
}
printf("%d\n", ans);
}
Submission Info
Submission Time
2020-06-29 22:47:28+0900
Task
D - Secret Passage
User
Tiw_Air_OAO
Language
C++ (GCC 9.2.1)
Score
1100
Code Size
2288 Byte
Status
AC
Exec Time
145 ms
Memory
72972 KiB
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:32:7: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
32 | scanf("%s", s), n = strlen(s);
| ~~~~~^~~~~~~~~
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
1100 / 1100
Status
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
138 ms
72460 KiB
02.txt
AC
139 ms
72068 KiB
03.txt
AC
138 ms
71552 KiB
04.txt
AC
141 ms
72896 KiB
05.txt
AC
143 ms
72436 KiB
06.txt
AC
140 ms
71976 KiB
07.txt
AC
137 ms
71544 KiB
08.txt
AC
139 ms
72972 KiB
09.txt
AC
129 ms
72428 KiB
10.txt
AC
132 ms
72008 KiB
11.txt
AC
142 ms
71524 KiB
12.txt
AC
145 ms
72884 KiB
13.txt
AC
138 ms
72432 KiB
14.txt
AC
136 ms
72068 KiB
15.txt
AC
128 ms
71492 KiB
16.txt
AC
142 ms
72908 KiB
17.txt
AC
131 ms
72428 KiB
18.txt
AC
137 ms
71980 KiB
19.txt
AC
9 ms
3136 KiB
20.txt
AC
2 ms
3060 KiB
21.txt
AC
2 ms
3020 KiB
22.txt
AC
3 ms
3080 KiB
23.txt
AC
2 ms
3056 KiB
24.txt
AC
3 ms
3084 KiB
s1.txt
AC
2 ms
3080 KiB
s2.txt
AC
2 ms
3136 KiB
s3.txt
AC
11 ms
8140 KiB