QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#766512#9536. Athlete Welcome CeremonyospoasaWA 7ms50140kbC++232.8kb2024-11-20 17:33:492024-11-20 17:33:54

Judging History

This is the latest submission verdict.

  • [2024-11-20 17:33:54]
  • Judged
  • Verdict: WA
  • Time: 7ms
  • Memory: 50140kb
  • [2024-11-20 17:33:49]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const int N = 305;
const LL mod = 998244353;

LL dp[2][N][N][3], f[N][N][N], A[N][N][N]; // 前i个字符, 选j个a, k个b
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n, q;
    cin >> n >> q;
    string S;
    cin >> S;
    S = ' ' + S;
    
    if(S[1] == 'a') dp[1][1][0][0] = 1;
    else if(S[1] == 'b') dp[1][0][1][1] = 1;
    else if(S[1] == 'c') dp[1][0][0][2] = 1;
    else dp[1][1][0][0] = dp[1][0][1][1] = dp[1][0][0][2] = 1;
    
    int up = 0, now = 1;
    for(int i = 2; i <= n; i++) 
    {
        up = (i + 1) % 2;
        now = up ^ 1;
        for(int j = 0; j <= i; j++) 
        {
            for(int k = 0; k <= i; k++) 
            {
                if(j + k > i) break;
                if(S[i] == 'a' || S[i] == '?') {
                    if(j > 0)
                    dp[now][j][k][0] = dp[up][j - 1][k][1] + dp[up][j - 1][k][2];
                    dp[now][j][k][0] %= mod;
                }

                if(S[i] == 'b' || S[i] == '?') {
                    if(k > 0)
                    dp[now][j][k][1] = dp[up][j][k - 1][0] + dp[up][j][k - 1][2];
                    dp[now][j][k][1] %= mod;
                }

                if(S[i] == 'c' || S[i] == '?') {
                    if(j + k < i)
                    dp[now][j][k][2] = dp[up][j][k][0] + dp[up][j][k][1];
                    dp[now][j][k][2] %= mod;
                }
            }
        }

        for(int j = 0; j <= i; j++) {
            for(int k = 0; k <= i; k++) {
                dp[up][j][k][0] = dp[up][j][k][1] = dp[up][j][k][2] = 0;
            }
        }
    }

    
    for(int i = 0; i <= n; i++) {
        for(int j = 0; j <= n; j++) {
            if(i + j > n) break;
            for(int h = 0; h < 3; h++) {
                A[i + 1][j + 1][n - i - j + 1] += dp[now][i][j][h];
                A[i + 1][j + 1][n - i - j + 1] %= mod;
            }
        }
    }

    for(int i = 1; i <= n + 1; i++)
	for(int j = 1; j <= n + 1; j++)
	for(int k = 1; k <= n + 1; k++) {
        f[i][j][k] = f[i - 1][j][k] + f[i][j - 1][k] + f[i][j][k - 1]
	    - f[i - 1][j - 1][k] - f[i - 1][j][k - 1] - f[i][j - 1][k - 1]
	    + f[i - 1][j - 1][k - 1] + A[i][j][k] + mod * 3;
        f[i][j][k] %= mod;
    }

    int ca = 0, cb = 0, cc = 0;
    for(int i = 1; i <= n; i++) {
        if(S[i] == 'a') ca++;
        else if(S[i] == 'b') cb++;
        else if(S[i] == 'c') cc++;
    }

    int x2, y2, z2;
    for(int i = 1; i <= q; i++) {
        cin >> x2 >> y2 >> z2;
        x2 = min(n, x2 + ca);
        y2 = min(n, y2 + cb);
        z2 = min(n, z2 + cc);
        x2++, y2++, z2++;
        // cout << x2 << ' ' << y2 << ' ' << z2 << '\n';
        cout << f[x2][y2][z2] << '\n';
    }
			

    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 5980kb

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: 1ms
memory: 5976kb

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: 1ms
memory: 5540kb

input:

1 1
?
0 1 1

output:

2

result:

ok single line: '2'

Test #4:

score: 0
Accepted
time: 2ms
memory: 8144kb

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: 1ms
memory: 8144kb

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: 0ms
memory: 15580kb

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: 0ms
memory: 17232kb

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

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: 4ms
memory: 50140kb

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:

804458366
986514507
631676168
668774326
10104
806873682
457652893
556612659
833031739
194151457
769278037
274041326
594216165
183174115
939173449
604062764
737118944
281846238
379026979
660541372
959207727
575057371
385668393
989871351
166230586
907706324
523034330
586950612
67939963
816607907
42635...

result:

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