QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#714884 | #9536. Athlete Welcome Ceremony | beamishboys# | WA | 202ms | 228908kb | C++23 | 2.0kb | 2024-11-06 08:56:50 | 2024-11-06 08:56:52 |
Judging History
answer
#include <vector>
#include <iostream>
using namespace std;
using ll = long long;
ll n, Q;
string s;
const ll mn = 300;
ll dp[mn+1][mn+1][mn+1][3];
ll dp2[mn+1][mn+1][mn+1];
const ll mod = 1e9+7;
signed main() {
cin >> n >> Q;
cin >> s;
/*dp[0][0][0][0] = 1;
dp[0][0][0][1] = 1;
dp[0][0][0][2] = 1;*/
if (s[0] == 'a' || s[0] == '?') {
dp[1][0][0][0] = 1;
}
if (s[0] == 'b' || s[0] == '?') {
dp[0][1][0][1] = 1;
}
if (s[0] == 'c' || s[0] == '?') {
dp[0][0][1][2] = 1;
}
ll m;
for (ll m = 2; m <= n; m++) {
for (ll i = 0; i <= m; i++) {
for (ll j = 0; i+j <= m; j++) {
ll k = m-i-j;
for (ll l = 0; l < 3; l++) {
if (s[m-1] != '?' && l != s[m-1] - 'a') continue;
if (l == 0 && i != 0) {
dp[i][j][k][l] = dp[i-1][j][k][1] + dp[i-1][j][k][2];
}
if (l == 1 && j != 0) {
dp[i][j][k][l] = dp[i][j-1][k][0] + dp[i][j-1][k][2];
}
if (l == 2 && k != 0) {
dp[i][j][k][l] = dp[i][j][k-1][0] + dp[i][j][k-1][1];
}
if (m == n) {
dp2[i][j][k] += dp[i][j][k][l];
dp2[i][j][k] %= mod;
}
dp[i][j][k][l] %= mod;
}
}
}
}
for (ll i = 0; i <= mn; i++) {
for (ll j = 0; j <= mn; j++) {
for (ll k = 0; k <= mn; k++) {
if (i > 0) dp2[i][j][k] += dp2[i-1][j][k];
if (j > 0) dp2[i][j][k] += dp2[i][j-1][k];
if (k > 0) dp2[i][j][k] += dp2[i][j][k-1];
if (i > 0 && j > 0) dp2[i][j][k] -= dp2[i-1][j-1][k];
if (j > 0 && k > 0) dp2[i][j][k] -= dp2[i][j-1][k-1];
if (k > 0 && i > 0) dp2[i][j][k] -= dp2[i-1][j][k-1];
if (i > 0 && j > 0 && k > 0) dp2[i][j][k] += dp2[i-1][j-1][k-1];
dp2[i][j][k] %= mod;
}
}
}
vector<ll> counts(3);
for (ll i = 0; i < n; i++) {
if (s[i] == '?') continue;
counts[s[i] - 'a']++;
}
ll a, b, c;
for (ll i = 0; i < Q; i++) {
cin >> a >> b >> c;
a += counts[0];
a = min(a, mn);
b += counts[1];
b = min(b, mn);
c += counts[2];
c = min(c, mn);
cout << dp2[a][b][c] << "\n";
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 202ms
memory: 225024kb
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: 179ms
memory: 228908kb
input:
6 3 ?????? 2 2 2 2 3 3 3 3 3
output:
30 72 96
result:
ok 3 lines
Test #3:
score: -100
Wrong Answer
time: 160ms
memory: 218848kb
input:
1 1 ? 0 1 1
output:
0
result:
wrong answer 1st lines differ - expected: '2', found: '0'