QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#724925 | #9536. Athlete Welcome Ceremony | ucup-team1001# | WA | 28ms | 8840kb | C++23 | 3.9kb | 2024-11-08 15:34:51 | 2024-11-08 15:34:51 |
Judging History
answer
/*
Author: Haze
*/
#include <bits/stdc++.h>
#define irep(i, l, r) for(int i = (l); i <= (r); ++ i)
#define drep(i, r, l) for(int i = (r); i >= (l); -- i)
#define IOS ios::sync_with_stdio(false), cin.tie(nullptr);
using namespace std;
typedef long long ll;
inline ll readL() {
ll s = 0;
bool fl = false;
char ch = (char) getchar();
while (!isdigit(ch)) {
if (ch == '-')fl = true;
ch = (char) getchar();
}
while (isdigit(ch)) {
s = s * 10 + (ch ^ 48);
ch = (char) getchar();
}
return fl ? -s : s;
}
inline int read() {
return (int) (readL());
}
const int mod = 1000000000 + 7;
const int itinf = 1000000999;
const ll llinf = 2e18;
const int N = 500099;
ll f[303][303][3], g[303][303][3];
ll pre[303][303];
void solve() {
int n = read(), q = read();
string s;
cin >> s;
s = " " + s;
int qr = count(s.begin(), s.end(), '?');
irep(i, 1, n - 1) {
if (s[i] == s[i + 1] and (s[i] == 'a' or s[i] == 'b' or s[i] == 'c')) {
irep(j, 1, q)cout << 0 << '\n';
return;
}
}
if (s[1] == '?') {
f[1][0][0] = f[0][1][1] = f[0][0][2] = 1;
}
if (s[1] == 'a')f[0][0][0] = 1;
if (s[1] == 'b')f[0][0][1] = 1;
if (s[1] == 'c')f[0][0][2] = 1;
swap(f, g);
int que = 0;
if(s[1] == '?')++ que;
irep(i, 2, n) {
if (s[i] == 'a') {
irep(a, 0, que) {
irep(b, 0, que - a) {
int c = que - a - b;
f[a][b][0] = g[a][b][1] + g[a][b][2];
if (f[a][b][0] >= mod)f[a][b][0] -= mod;
}
}
}
if (s[i] == 'b') {
irep(a, 0, que) {
irep(b, 0, que - a) {
int c = que - a - b;
f[a][b][1] = g[a][b][0] + g[a][b][2];
if (f[a][b][1] >= mod)f[a][b][1] -= mod;
}
}
}
if (s[i] == 'c') {
irep(a, 0, que) {
irep(b, 0, que - a) {
int c = que - a - b;
f[a][b][2] = g[a][b][0] + g[a][b][1];
if (f[a][b][2] >= mod)f[a][b][2] -= mod;
}
}
}
if (s[i] == '?') {
irep(a, 0, que) {
irep(b, 0, que - a) {
int c = que - a - b;
f[a + 1][b][0] = g[a][b][1] + g[a][b][2];
f[a][b + 1][1] = g[a][b][0] + g[a][b][2];
f[a][b][2] = g[a][b][0] + g[a][b][1];
if (f[a + 1][b][0] >= mod)f[a + 1][b][0] -= mod;
if (f[a][b + 1][1] >= mod)f[a][b + 1][1] -= mod;
if (f[a][b][2] >= mod)f[a][b][1] -= mod;
}
}
}
if(s[i] == '?') ++ que;
swap(f, g);
memset(f, 0, sizeof f);
// irep(ii, 0, 3){
// irep(jj, 0, 3){
// cerr << g[ii][jj][0] << ' ';
// }
// cerr<<endl;
// }
}
irep(i, 0, 300){
irep(j, 0, 300){
pre[i][j] = (g[i][j][0] + g[i][j][1] + g[i][j][2]) % mod;
if(j)pre[i][j] += pre[i][j - 1];
pre[i][j] %= mod;
}
}
while(q --){
int a = read(), b = read(), c = read();
ll ans = 0;
for(int x = 0; x <= a; ++ x){
int L = qr - x - c, R = b;
// cerr << L << ' ' << R << endl;
L = max(L, 0);
if(L <= R){
ans += pre[x][R];
if(L)ans -= pre[x][L - 1];
ans %= mod;
}
}
cout << (ans + mod) % mod << '\n';
}
}
int main() {
// IOS
int T = 1;
while (T--) {
solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 4ms
memory: 8532kb
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: 0ms
memory: 8620kb
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: 3ms
memory: 8832kb
input:
1 1 ? 0 1 1
output:
2
result:
ok single line: '2'
Test #4:
score: 0
Accepted
time: 2ms
memory: 8584kb
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:
0 1 1 1 1 0 1 1 1 1
result:
ok 10 lines
Test #5:
score: 0
Accepted
time: 2ms
memory: 8784kb
input:
10 10 ?c?c?cbac? 10 5 1 5 8 7 9 2 6 5 7 1 5 2 6 5 6 5 5 10 3 9 1 10 2 5 9 1 2 9
output:
16 16 11 16 11 16 16 5 11 0
result:
ok 10 lines
Test #6:
score: 0
Accepted
time: 15ms
memory: 8532kb
input:
50 100 ?abacbacab?cbcbcb?acabcbabcbcacbababc?caba?acacbca 8 3 8 2 4 8 8 7 3 0 9 2 10 8 7 7 6 5 4 10 2 6 9 3 3 6 6 9 10 8 2 5 8 8 1 0 3 5 0 1 0 6 5 0 8 6 5 5 1 7 9 7 7 10 4 7 5 6 6 4 10 1 2 4 1 7 10 0 8 7 6 3 1 9 1 4 7 2 8 4 0 8 6 1 5 10 4 5 8 2 5 8 4 4 5 9 5 2 1 1 10 9 4 10 1 8 4 3 8 9 9 8 0 1 0 8 0...
output:
8 8 8 0 8 8 6 8 8 8 8 0 0 0 1 8 4 8 8 8 2 4 1 8 1 6 0 2 8 6 8 8 1 4 2 8 8 0 0 8 2 0 8 8 8 4 8 8 8 8 2 0 0 4 8 8 1 8 7 6 7 0 8 8 8 0 4 7 8 4 0 8 0 4 8 8 8 7 8 4 7 2 8 8 8 0 2 2 8 8 8 4 4 0 8 0 8 8 1 1
result:
ok 100 lines
Test #7:
score: 0
Accepted
time: 11ms
memory: 8556kb
input:
50 100 b????????bca?????c?b??ca?acac?b?b???ca?ab???a?a??? 35 43 36 12 49 47 7 11 34 38 44 22 42 17 10 49 8 38 18 26 44 6 18 14 28 29 6 48 32 47 29 15 48 1 5 33 24 17 18 10 27 32 19 10 34 2 23 9 14 24 39 46 12 34 9 49 26 21 8 46 43 43 3 31 16 2 8 27 7 24 41 35 17 25 31 0 13 47 24 31 23 33 40 30 36 39...
output:
34272000 31599360 497244 34272000 17637520 12290752 34272000 93044 415832 34272000 34272000 0 34272000 16360704 27933952 0 34272000 33886976 7896832 12290752 718 24 0 34272000 34272000 0 34272000 34272000 34272000 32254720 0 5666944 34256640 34272000 34272000 12290752 30493248 34256640 20630016 0 10...
result:
ok 100 lines
Test #8:
score: 0
Accepted
time: 28ms
memory: 8608kb
input:
100 1000 c?cbababcabacbacbacacbacabcbabababacababcbcab?cbabacbacbcbcacbab?bcabcbcababcacbabacbcb?babcbab?baca 13 11 4 4 17 20 14 5 2 16 14 15 8 12 17 19 5 11 5 17 12 20 7 6 19 10 1 6 5 0 13 1 9 7 17 1 20 4 16 11 12 18 19 2 16 18 1 11 19 16 3 7 1 0 6 9 16 6 9 16 6 20 7 0 16 20 1 2 8 16 5 20 18 14 18 ...
output:
16 15 14 16 16 16 16 16 8 2 16 8 16 16 16 16 16 2 16 16 16 0 1 16 16 5 1 5 16 16 16 16 16 15 16 13 16 15 2 16 16 1 8 16 16 16 15 0 16 15 16 16 16 16 8 8 16 16 16 16 16 16 8 16 16 1 8 8 16 16 1 16 1 0 16 2 2 16 7 16 16 8 16 16 16 16 1 16 14 16 16 16 16 5 16 16 14 16 11 16 15 11 2 1 8 16 16 7 16 5 16 ...
result:
ok 1000 lines
Test #9:
score: -100
Wrong Answer
time: 24ms
memory: 8840kb
input:
100 1000 ?????c??????????????????????????b???a????a?????????????????????????c???????????????????????????????? 43 38 20 27 40 32 39 27 33 28 50 43 50 3 46 38 46 14 42 48 10 45 25 28 49 10 49 38 17 42 41 49 22 41 18 44 46 47 25 17 44 35 34 43 22 47 42 32 32 44 40 36 41 24 45 38 45 49 44 18 42 34 32 43...
output:
655163665 14917686 619520577 695638648 10104 219100551 479284703 764218529 903846231 659694548 944623437 105920502 410085546 182802705 368254667 765752801 687922874 931936614 135230350 287222624 876871677 282705923 955566053 204756215 414825329 62861035 345264578 111119718 295402274 241594071 438136...
result:
wrong answer 1st lines differ - expected: '490475656', found: '655163665'