QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#712859#9536. Athlete Welcome Ceremonyucup-team1769WA 178ms294612kbC++143.7kb2024-11-05 17:19:282024-11-05 17:19:29

Judging History

This is the latest submission verdict.

  • [2024-11-05 17:19:29]
  • Judged
  • Verdict: WA
  • Time: 178ms
  • Memory: 294612kb
  • [2024-11-05 17:19:28]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 300 + 10;
const int mod = 1e9 + 7;
int dp[N][3][N][N];
int res[N][N][N];

void solve()
{
    int n, q;
    cin >> n >> q;

    string s;
    cin >> s;
    s = ' ' + s;

    int sum = 0, cnt = 0;
    for (int i = 1; i <= n; i++)
    {
        if (s[i] == '?')
            sum++;
    }

    if (s[1] == '?')
    {
        if (s[2] != 'a')
            dp[1][0][1][0] = 1;
        if (s[2] != 'b')
            dp[1][1][0][1] = 1;
        if (s[2] != 'c')
            dp[1][2][0][0] = 1;
    }
    else
    {
        int k = s[1] - 'a';
        dp[1][k][0][0] = 1;
    }

    for (int i = 2; i <= n; i++)
    {
        if (s[i] == '?')
        {
            for (int k = 0; k < 3; k++)
            {
                if (s[i - 1] - 'a' == k)
                    continue;

                if (i < n && s[i + 1] - 'a' == k)
                    continue;

                for (int a = 0; a <= sum; a++)
                {
                    for (int b = 0; b <= sum; b++)
                    {
                        if (k == 0)
                            dp[i][0][a + 1][b] = (dp[i][0][a + 1][b] + dp[i - 1][1][a][b] + dp[i - 1][2][a][b]) % mod;
                        else if (k == 1)
                            dp[i][1][a][b + 1] = (dp[i][1][a][b + 1] + dp[i - 1][0][a][b] + dp[i - 1][2][a][b]) % mod;
                        else
                            dp[i][2][a][b] = (dp[i][2][a][b] + dp[i - 1][0][a][b] + dp[i - 1][1][a][b]) % mod;
                    }
                }
            }
        }
        else
        {
            int k = s[i] - 'a';
            for (int a = 0; a <= sum; a++)
            {
                for (int b = 0; b <= sum; b++)
                {
                    dp[i][k][a][b] = (dp[i][k][a][b] + dp[i - 1][0][a][b] + dp[i - 1][1][a][b] + dp[i - 1][2][a][b]) % mod;
                }
            }
        }
    }

    // for (int i = 1; i <= n; i++)
    // {
    //     for (int k = 0; k < 3; k++)
    //     {
    //         for (int a = 0; a <= sum; a++)
    //         {
    //             for (int b = 0; b <= sum; b++)
    //             {
    //                 cout << i << ' ' << k << ' ' << a << ' ' << b << ' ' << dp[i][k][a][b] << endl;
    //             }
    //         }
    //     }
    // }

    for (int a = 0; a <= sum; a++)
    {
        for (int b = 0; b <= sum; b++)
        {
            int c = sum - a - b;
            res[a + 1][b + 1][c + 1] = (dp[n][0][a][b] + dp[n][1][a][b] + dp[n][2][a][b]) % mod;
        }
    }
    // for (int a = 0; a <= sum; a++)
    // {
    //     for (int b = 0; b <= sum; b++)
    //     {
    //         for (int c = 0; c <= sum; c++)
    //         {
    //             cout << a << ' ' << b << ' ' << c << ' ' << res[a + 1][b + 1][c + 1] << endl;
    //         }
    //     }
    // }

    for (int a = 0; a <= 300; a++)
    {
        for (int b = 0; b <= 300; b++)
        {
            for (int c = 0; c <= 300; c++)
            {
                res[a + 1][b + 1][c + 1] += res[a][b + 1][c + 1] + res[a + 1][b][c + 1] + res[a + 1][b + 1][c] + res[a][b][c];
                res[a + 1][b + 1][c + 1] -= res[a][b][c + 1] + res[a][b + 1][c] + res[a + 1][b][c];
                res[a + 1][b + 1][c + 1] = (res[a + 1][b + 1][c + 1] + mod) % mod;
            }
        }
    }

    int a, b, c;
    while (q--)
    {
        cin >> a >> b >> c;

        cout << res[a + 1][b + 1][c + 1] << '\n';
    }
}

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

    int t = 1;
    // cin >> t;
    while (t--)
        solve();

    return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 127ms
memory: 226712kb

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

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

input:

1 1
?
0 1 1

output:

2

result:

ok single line: '2'

Test #4:

score: 0
Accepted
time: 148ms
memory: 226256kb

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

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

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

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

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

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:

490475656
143989836
119661929
707864467
10104
219100551
479284703
764218529
903846231
659694548
204287063
105920502
191779504
182802705
215438611
938692318
797581204
903917420
893995828
287222624
578695829
95654849
457810426
709349795
85961844
923330494
783007506
111119718
295402274
241594071
551680...

result:

wrong answer 170th lines differ - expected: '931481592', found: '-68518415'