QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#713060#9536. Athlete Welcome CeremonyOneWanWA 187ms129164kbC++234.0kb2024-11-05 17:58:502024-11-05 17:58:50

Judging History

This is the latest submission verdict.

  • [2024-11-05 17:58:50]
  • Judged
  • Verdict: WA
  • Time: 187ms
  • Memory: 129164kb
  • [2024-11-05 17:58:50]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 301;
#define ll long long 
int f[N][N][N][3];
int sum[N][N][N];
int cnt[N];
const int mod = 1e9 + 7;
void add(int &a, const int &b) {
    a += b;
    if(a >= mod) a -= mod;
}

void del(int &a, const int &b) {
    a -= b;
    if (a < 0) a += mod;
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n, m;
    cin >> n >> m;
    string s;
    cin >> s;
    s = ' ' + s;
    for (int i = 1; i <= n; i++) {
        cnt[i] = cnt[i - 1] + (s[i] == '?');
    } 

    if(s[1] == 'a') f[1][0][0][0] = 1;
    else if(s[1] == 'b') f[1][0][0][1] = 1;
    else if(s[1] == 'c') f[1][0][0][2] = 1;
    else f[1][1][0][0] = f[1][0][1][1] = f[1][0][0][2] = 1;
 

    for (int x = 1; x < n; x++) {
        for (int i = 0; i <= cnt[x]; i++) {
            for (int j = 0; i + j <= cnt[x]; j++) {
                int k = cnt[x] - i - j; 
                for (int c = 0; c < 3; c++) { 
                    int& res = f[x][i][j][c]; 
                    if(s[x + 1] == 'a') {  
                        if(c != 0)
                        add(f[x + 1][i][j][0], res);
                    }
                    else if(s[x + 1] == 'b') { 
                        if(c != 1)
                        add(f[x + 1][i][j][1], res); 
                    }
                    else if(s[x + 1] == 'c') { 
                        if(c != 2)
                        add(f[x + 1][i][j][2], res); 
                    }
                    else { 
                        if(c == 0) {
                            add(f[x + 1][i][j + 1][1], res), add(f[x + 1][i][j][2], res);  
                        }
                        else if(c == 1) {
                            add(f[x + 1][i + 1][j][0], res), add(f[x + 1][i][j][2], res);
                        }
                        else if(c == 2) {
                            add(f[x + 1][i][j + 1][1], res), add(f[x + 1][i + 1][j][0], res); 
                        }
                    } 
                } 
            } 
        }
    }

    auto de = [&]() {
        for (int x = 1; x <= n; x++) { 
            for (int i = 0; i <= cnt[x]; i++)
                for (int j = 0; j + i <= cnt[x]; j++)
                    for (int c = 0; c < 3; c++)
                        if(f[x][i][j][c]) cout << x << ' ' << i << ' ' << j << ' ' << cnt[x] - i - j << ' ' << c << ' ' << f[x][i][j][c] << '\n';
        }
    }; 
    // de();
    // cout << f[6][1][1][2];

    for (int i = 0; i <= cnt[n]; i++)
        for (int j = 0; i + j <= cnt[n]; j++) {
            int k = cnt[n] - i - j;
            for (int c = 0; c < 3; c++) {
                sum[i][j][k] += f[n][i][j][c];
            }
        }
    
    // cout << sum[1][1][1] << '\n';

    for (int i = 0; i < N; i++) 
        for (int j = 0;  j < N; j++)
            for (int k = 0;  k < N; k++) {
                // if (k >= 1) add(sum[i][j][k], sum[i][j][k - 1]);
                if(i - 1 >= 0) add(sum[i][j][k], sum[i - 1][j][k]);
                if(j - 1 >= 0) add(sum[i][j][k], sum[i][j - 1][k]);
                if(k - 1 >= 0) add(sum[i][j][k], sum[i][j][k - 1]);
                if(j - 1 >= 0 && i - 1 >= 0) del(sum[i][j][k], sum[i - 1][j - 1][k]);
                if(k - 1 >= 0 && i - 1 >= 0) del(sum[i][j][k], sum[i - 1][j][k - 1]);
                if(j - 1 >= 0 && k - 1 >= 0) del(sum[i][j][k], sum[i][j - 1][k - 1]);
                if(i - 1 >= 0 && j >= 1 && k >= 1)add(sum[i][j][k], sum[i - 1][j - 1][k - 1]); 
                // if(sum[i][j][k]) cout << i << ' ' << j << ' ' << k << ' ' << sum[i][j][k] << '\n';
            }

    // for (int i = 0; i <= 2; i++)
    //     for (int j = 0; j <= 2; j++)
    //         for (int k = 0; k <= 2; k++) 
    //             cout << i << ' ' << j << ' ' << k << ' ' << sum[i][j][k] << '\n';
 

    while(m--) {
        int a, b, c;
        cin >> a >> b >> c;
        cout << sum[a][b][c] << '\n';
    }

    
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 141ms
memory: 112180kb

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: 133ms
memory: 111540kb

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: 137ms
memory: 112352kb

input:

1 1
?
0 1 1

output:

2

result:

ok single line: '2'

Test #4:

score: 0
Accepted
time: 117ms
memory: 111684kb

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: 152ms
memory: 112536kb

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: 145ms
memory: 113128kb

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: 134ms
memory: 115140kb

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: 141ms
memory: 112960kb

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: 187ms
memory: 129164kb

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:

195508388
259088039
939792871
858846490
10104
334198754
479284703
174283993
18944427
659694548
894876281
515985973
342761527
182802705
215438611
24903472
898235886
313982884
440599794
337549965
39088634
527160619
688006832
529480730
906092786
448494161
718236644
816152457
705467745
176823209
6667784...

result:

wrong answer 1st lines differ - expected: '490475656', found: '195508388'