QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#724925#9536. Athlete Welcome Ceremonyucup-team1001#WA 28ms8840kbC++233.9kb2024-11-08 15:34:512024-11-08 15:34:51

Judging History

This is the latest submission verdict.

  • [2024-11-08 15:34:51]
  • Judged
  • Verdict: WA
  • Time: 28ms
  • Memory: 8840kb
  • [2024-11-08 15:34:51]
  • Submitted

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;
}

詳細信息

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'