QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#723453 | #9463. 基础 ABC 练习题 | hhoppitree | 0 | 0ms | 0kb | C++17 | 2.6kb | 2024-11-07 22:20:27 | 2024-11-07 22:20:27 |
answer
#include <bits/stdc++.h>
using namespace std;
const int N = 65;
unsigned int f[2][N][N][4];
signed main() {
int T; scanf("%d%*d", &T);
while (T--) {
int n; scanf("%d", &n);
string S1, S2; cin >> S1 >> S2;
vector<int> o1, o2;
for (int i = 0; i <= n; ++i) {
if (S1[i] == '1') o1.push_back(i);
if (S2[i] == '1') o2.push_back(i);
}
string S; cin >> S, S = ' ' + S;
// if (n != 60) {
// puts("-1");
// continue;
// }
unsigned int res = 0;
for (int i = 0; i < (int)o1.size(); ++i) {
for (int j = 0; j < (int)o2.size(); ++j) {
int l1 = (!i ? 0 : o1[i - 1] + 1), r1 = o1[i],
l2 = (!j ? 0 : o2[j - 1] + 1), r2 = o2[j], r3 = n - r1 - r2;
if (r3 < 0) continue;
memset(f[0], 0, sizeof(f[0]));
f[0][0][0][(!l1) | ((!l2) << 1)] = 1;
for (int k = 1; k <= n * 3; ++k) {
memset(f[k & 1], 0, sizeof(f[k & 1]));
for (int p = 0; p < k && p <= n; ++p) {
for (int q = 0; p + q <= k && q <= n && q - p <= r2; ++q) {
unsigned int *tg = f[(k & 1) ^ 1][p][q];
int r = k - 1 - p - q;
if (r < 0 || r > n || r - q > r3 || p - r > r1) continue;
if ((S[k] == '?' || S[k] == 'A') && p - r + 1 <= r1) {
unsigned int *tf = f[k & 1][p + 1][q];
if (p - r + 1 >= l1) tf[1] += tg[0] + tg[1], tf[3] += tg[2] + tg[3];
else tf[0] += tg[0], tf[1] += tg[1], tf[2] += tg[2], tf[3] += tg[3];
}
if ((S[k] == '?' || S[k] == 'B') && q - p + 1 <= r2) {
unsigned int *tf = f[k & 1][p][q + 1];
if (q - p + 1 >= l2) tf[2] += tg[0] + tg[2], tf[3] += tg[1] + tg[3];
else tf[0] += tg[0], tf[1] += tg[1], tf[2] += tg[2], tf[3] += tg[3];
}
if ((S[k] == '?' || S[k] == 'C') && r - q + 1 <= r3) {
unsigned int *tf = f[k & 1][p][q];
tf[0] += tg[0], tf[1] += tg[1], tf[2] += tg[2], tf[3] += tg[3];
}
}
}
}
res += f[n & 1][n][n][3];
}
}
printf("%u\n", res);
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Time Limit Exceeded
Test #1:
score: 0
Time Limit Exceeded
input:
60 1 1 11 11 ABC 2 111 111 CABABC 3 1111 1111 CAABBCBAC 4 11111 11111 BACBBACBACAC 5 111111 111111 CABCCBBAABCCBAA 6 1111111 1111111 ABABABCACBCBCCACBA 7 11111111 11111111 BCAABACBBCBBABCCAACAC 8 111111111 111111111 CCBCBBBCAABCBCAAAAACBCBA 9 1111111111 1111111111 CCCCACABCBABAABCCAABABBCBBA 10 1111...
output:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
result:
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Time Limit Exceeded
Test #22:
score: 0
Time Limit Exceeded
input:
60 3 1 11 11 ??? 2 111 111 ?????? 3 1111 1111 ????????? 4 11111 11111 ???????????? 5 111111 111111 ??????????????? 6 1111111 1111111 ?????????????????? 7 11111111 11111111 ????????????????????? 8 111111111 111111111 ???????????????????????? 9 1111111111 1111111111 ??????????????????????????? 10 1111...
output:
3 48 1077 25950 631596 15361200 373543344 513491674 3715046604 2905885740 1568880512 2580218992 1190440544 717460800 3773052672 4125163354 1253250684 451796724 588301280 3790101036 1976168152 2307984512 3414639104 4155978864 3748854816 300437408 2740636160 342373696 3437770880 3706226944 2582641664 ...
result:
Subtask #4:
score: 0
Skipped
Dependency #1:
0%
Subtask #5:
score: 0
Skipped
Dependency #1:
0%