QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#713550#9536. Athlete Welcome Ceremonyucup-team2179#RE 0ms0kbC++202.1kb2024-11-05 19:46:212024-11-05 19:46:21

Judging History

This is the latest submission verdict.

  • [2024-11-05 19:46:21]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2024-11-05 19:46:21]
  • Submitted

answer

#include<bits/stdc++.h>
#define pii pair<int, int>
using namespace std;
const int N = 303, mod = 1e9 + 7;
int n, q, dp[2][N][N][3];
int sum[N][N][N][4];
signed main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n >> q;
    string st;
    cin >> st;
    st = ' ' + st;
    int s = 0;
    if(st[1] == '?'){
        dp[1][1][0][0] = dp[1][0][1][1] = dp[1][0][0][2] = 1;
        s++;
    }
    else
        dp[1][0][0][st[1] - 'a'] = 1;
    for (int i = 2; i <= n; i++){
        memset(dp[i & 1], 0, sizeof dp[i & 1]);
        for (int j = 0; j <= s; j++)
            for (int k = 0; k + j <= s; k++){
                if(st[i] == '?'){
                    dp[i & 1][j + 1][k][0] = (dp[(i - 1) & 1][j][k][1] + dp[(i - 1) & 1][j][k][2]) % mod;
                    dp[i & 1][j][k + 1][1] = (dp[(i - 1) & 1][j][k][0] + dp[(i - 1) & 1][j][k][2]) % mod;
                    dp[i & 1][j][k][2] = (dp[(i - 1) & 1][j][k][0] + dp[(i - 1) & 1][j][k][1]) % mod;
                } 
                else {
                    for(int t : {0, 1, 2})
                        if(st[i] - 'a' != t) dp[i & 1][j][k][st[i] - 'a'] = (dp[i & 1][j][k][st[i] - 'a'] + dp[(i - 1) & 1][j][k][t]) % mod;
                }
            }
        if(st[i] == '?')
            s++;
    }
    for (int i = 0; i <= s; i++)
        for (int j = 0; i + j <= s; j++)
             for(int t : {0, 1, 2})
                sum[i][j][s - i - j][0] = (sum[i][j][s - i - j][0] + dp[n & 1][i][j][t]) % mod;
    for(int t : {1, 2, 3})
    for (int i = 0; i <= n; i++)
        for (int j = 0; j <= n; j++)
            for (int k = 0; k <= n; k++){
                int x;
                if(t == 1)
                    x = (k != 0) * sum[i][j][k - 1][t];
                if(t == 2)
                    x = (j != 0) * sum[i][j - 1][k][t];
                if(t == 3)
                    x = (i != 0) * sum[i - 1][j][k][t];
                sum[i][j][k][t] = (x + sum[i][j][k][t-1]) % mod;
            }
    for(int i = 1; i <= q; i++){
        int x, y, z;
        cin >> x >> y >> z;
        cout << sum[x][y][z][3] << '\n';
    }
    return 0;
}

详细

Test #1:

score: 0
Runtime Error

input:

6 3
a?b??c
2 2 2
1 1 1
1 0 2

output:


result: