QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#763976 | #9536. Athlete Welcome Ceremony | XiaoYang3 | WA | 164ms | 222860kb | C++23 | 3.6kb | 2024-11-19 23:07:44 | 2024-11-19 23:07:46 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 2e5 + 5;
using pii = pair<int, int>;
ll n, m, q;
int dp[303][303][303][2][3];
// 12 13 14
ll ans[303][303][303];
const int P = 1e9 + 7;
string s;
void solve() {
cin >> n >> q;
cin >> s;
s = ' ' + s;
int cnt = 0;
int now = 0;
if (s[1] == '?') {
dp[1][0][0][now][0] = 1;
dp[0][1][0][now][1] = 1;
dp[0][0][1][now][2] = 1;
cnt = 1;
} else {
int u = s[1] - 'a';
dp[0][0][0][now][u] = 1;
}
for (int i = 2; i <= n; i++) {
if (s[i] == '?') {
for (int u = 0; u <= 2; u++) {
for (int j = 0; j <= cnt; j++) {
for (int k = 0; (k + j) <= cnt; k++) {
for (int z = cnt - (k + j); (z + j + k) <= cnt; z++) {
for (int ii = 0; ii <= 2; ii++) {
if (ii != u) {
int jj = j, kk = k, zz = z;
if (u == 0) {
jj++;
}
if (u == 1) {
kk++;
}
if (u == 2) {
zz++;
}
dp[jj][kk][zz][now ^ 1][u] +=
dp[j][k][z][now][ii];
dp[jj][kk][zz][now ^ 1][u] %= P;
}
}
}
}
}
}
cnt++;
} else {
int u = s[i] - 'a';
for (int j = 0; j <= cnt; j++) {
for (int k = 0; (k + j) <= cnt; k++) {
for (int z = cnt - (k + j); (z + j + k) <= cnt; z++) {
for (int ii = 0; ii <= 2; ii++) {
if (ii != u) {
dp[j][k][z][now ^ 1][u] += dp[j][k][z][now][ii];
dp[j][k][z][now ^ 1][u] %= P;
}
}
}
}
}
}
now ^= 1;
}
for (int i = 0; i <= cnt; i++) {
for (int j = 0; (j + i) <= cnt; j++) {
for (int z = cnt - (j + i); (j + i + z) <= cnt; z++) {
for (int u = 0; u <= 2; u++) {
ans[i + 1][j + 1][z + 1] += dp[i][j][z][now][u];
ans[i + 1][j + 1][z + 1] %= P;
}
}
}
}
// 111 102 012
for (int i = 1; i <= 302; i++) {
for (int j = 1; j <= 302; j++) {
for (int k = 1; k <= 302; k++) {
ans[i][j][k] += ans[i - 1][j][k] + ans[i][j - 1][k] +
ans[i][j][k - 1] - ans[i - 1][j - 1][k] -
ans[i - 1][j][k - 1] - ans[i][j - 1][k - 1] +
ans[i - 1][j - 1][k - 1];
ans[i][j][k] %= P;
}
}
} // 3
// 122=022+112+121-012-121-111+011
// cout << ans[0][2][2] << "\n";
while (q--) {
int x, y, z;
cin >> x >> y >> z;
cout << ans[x + 1][y + 1][z + 1] << '\n';
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int _ = 1;
// cin >> _;
while (_--) {
solve();
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 140ms
memory: 221084kb
input:
6 3 a?b??c 2 2 2 1 1 1 1 0 2
output:
3 1 1
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 164ms
memory: 222564kb
input:
6 3 ?????? 2 2 2 2 3 3 3 3 3
output:
30 72 96
result:
ok 3 lines
Test #3:
score: 0
Accepted
time: 143ms
memory: 222860kb
input:
1 1 ? 0 1 1
output:
2
result:
ok single line: '2'
Test #4:
score: -100
Wrong Answer
time: 143ms
memory: 221336kb
input:
10 10 acab?cbaca 0 2 0 1 1 2 4 2 3 1 1 1 3 5 1 0 5 2 2 2 0 1 2 5 4 3 0 1 1 3
output:
7 25 25 25 25 13 19 25 19 25
result:
wrong answer 1st lines differ - expected: '0', found: '7'