QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#714663#9536. Athlete Welcome Ceremonyucup-team1766RE 0ms0kbC++203.4kb2024-11-06 01:58:412024-11-06 01:58:44

Judging History

This is the latest submission verdict.

  • [2024-11-06 01:58:44]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2024-11-06 01:58:41]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;

#define pb push_back
#define f first
#define s second
#define pll pair<ll, ll>
#define pii pair<int, int>

const int MOD = 1e9+7;

const int N = 300;
int dp[N+1][N+1][N+1][3];
int vals[N+1][N+1][N+1];
int pref[N+1][N+1][N+1];

int main(){
    cin.tie(0), ios::sync_with_stdio(0);
    int n, q;
    cin >> n >> q;
    string str;
    cin >> str;

    if(str[0] == 'a'){
        dp[1][0][0][0] = 1;
    }else if(str[0] == 'b'){
        dp[1][0][0][1] = 1;
    }
    else if(str[0] == 'c'){
        dp[1][0][0][2] = 1;
    }else{
        dp[1][1][0][0] = 1;
        dp[1][0][1][1] = 1;
        dp[1][0][0][2] = 1;
    }

    for(int i = 2; i <= n; i++){
        char c = str[i-1];
        for(int j = 0; j <= n; j++){
            for(int k = 0; k <= n; k++){
                if(c == 'a'){
                    dp[i][j][k][0] = (dp[i-1][j][k][1] + dp[i-1][j][k][2])%MOD;
                }else if(c == 'b'){
                    dp[i][j][k][1] = (dp[i-1][j][k][0] + dp[i-1][j][k][2])%MOD;
                }else if(c == 'c'){
                    dp[i][j][k][2] = (dp[i-1][j][k][0] + dp[i-1][j][k][1])%MOD;
                }else{
                    if (j) dp[i][j][k][0] = (dp[i-1][j-1][k][1] + dp[i-1][j-1][k][2])%MOD;
                    if (k) dp[i][j][k][1] = (dp[i-1][j][k-1][0] + dp[i-1][j][k-1][2])%MOD;
                    dp[i][j][k][2] = (dp[i-1][j][k][0] + dp[i-1][j][k][1])%MOD;
                }
            }
        }
    }

    int ques = count(str.begin(),str.end(),'?');
    for (int a = 0; a <= n; a++) for (int b = 0; b <= n; b++) {
		if (0 <= ques-a-b and ques-a-b <= n) vals[a][b][ques-a-b] = accumulate(dp[n][a][b], dp[n][a][b]+3, 0ll) % MOD;
    }

	/*
	for (int i = 1; i <= n; i++) for (int j = 0; j <= n; j++) for (int k = 0; k <= n; k++) {
	pref[i][j][k] = (pref[i][j][k] + pref[i-1][j][k]) % MOD;
    }
    for (int i = 0; i <= n; i++) for (int j = 1; j <= n; j++) for (int k = 0; k <= n; k++) {
	pref[i][j][k] = (pref[i][j][k] + pref[i][j-1][k]) % MOD;
    }
    for (int i = 0; i <= n; i++) for (int j = 0; j <= n; j++) for (int k = 1; k <= n; k++) {
	pref[i][j][k] = (pref[i][j][k] + pref[i][j][k-1]) % MOD;
    }
	*/
	
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			ll val = (ll)vals[i][j][0] + pref[i-1][j][0] + pref[i][j-1][0] - pref[i-1][j-1][0];
			pref[i][j][0] = val % MOD;
		}
	}
	
	for(int j = 1; j <= n; j++){
		for(int k = 1; k <= n; k++){
			ll val = (ll)vals[0][j][k] + pref[0][j][k-1] + pref[0][j-1][k] - pref[0][j-1][k-1];
			pref[0][j][k] = val % MOD;
		}
	}
	
	for(int i = 1; i <= n; i++){
		for(int k = 1; k <= n; k++){
			ll val = (ll)vals[i][0][k] + pref[i][0][k-1] + pref[i-1][0][k] - pref[i-1][0][k-1];
			pref[1][0][k] = val % MOD;
		}
	}
	
    for (int i = 0; i <= n; i++){
		for (int j = 0; j <= n; j++){
			for (int k = 0; k <= n; k++) {
				ll val = (ll)vals[i][j][k] + pref[i-1][j][k] + pref[i][j-1][k] + pref[i][j][k-1] - pref[i-1][j-1][k] - pref[i-1][j][k-1] - pref[i][j-1][k-1] + pref[i-1][j-1][k-1];
				pref[i][j][k] = val % MOD;
			}
		} 
	} 
    /*
	for (int i = 0; i <= n; i++){
		for (int j = 0; j <= n; j++){
			for (int k = 0; k <= n; k++) {
				cout << pref[i][j][k] << " ";
			}
			cout << "\n";
		}
		cout << "\n";
	} 
	*/
    while (q--) {
	    int x, y, z; cin >> x >> y >> z;
	    cout << pref[x][y][z] << '\n';
    }
}

详细

Test #1:

score: 0
Runtime Error

input:

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

output:


result: