QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#722603#9536. Athlete Welcome CeremonymonuiWA 175ms225700kbC++231.8kb2024-11-07 19:38:232024-11-07 19:38:23

Judging History

This is the latest submission verdict.

  • [2024-11-07 19:38:23]
  • Judged
  • Verdict: WA
  • Time: 175ms
  • Memory: 225700kb
  • [2024-11-07 19:38:23]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl "\n"
const int N=301;
const int M=1e9+7;

int n,q;
int dp[3][N][N][N];
int sum[N][N][N];

void solve(){
	cin>>n>>q;
	string s;cin>>s;
	s="#"+s;
	int cnt=0;
	if(s[1]=='a') dp[0][0][0][0]=1;
	else if(s[1]=='b') dp[1][0][0][0]=1;
	else if(s[1]=='c') dp[2][0][0][0]=1;
	else dp[0][1][0][0]=dp[1][0][1][0]=dp[2][0][0][1]=1,++cnt;
	
	for(int i=2;i<=n;i++){
		if(s[i]=='?') ++cnt;
		for(int j=cnt;j>=0;j--){
			for(int k=cnt-j;k>=0;k--){
				int p=cnt-j-k;
				if(s[i]=='?'){
					if(j) dp[0][j][k][p]=(dp[1][j-1][k][p]+dp[2][j-1][k][p])%M;
					if(k) dp[1][j][k][p]=(dp[0][j][k-1][p]+dp[2][j][k-1][p])%M;
					if(p) dp[2][j][k][p]=(dp[0][j][k][p-1]+dp[1][j][k][p-1])%M;
				}
				else{
					if(s[i]=='a') {
						dp[0][j][k][p]=(dp[1][j][k][p]+dp[2][j][k][p])%M;
						dp[1][j][k][p]=dp[2][j][k][p]=0;
					}
					if(s[i]=='b') {
						dp[1][j][k][p]=(dp[0][j][k][p]+dp[2][j][k][p])%M;
						dp[0][j][k][p]=dp[2][j][k][p]=0;
					}
					if(s[i]=='c') {
						dp[2][j][k][p]=(dp[0][j][k][p]+dp[1][j][k][p])%M;
						dp[0][j][k][p]=dp[1][j][k][p]=0;
					}
				}
				if(i==n) sum[j][k][p]=(dp[0][j][k][p]+dp[1][j][k][p]+dp[2][j][k][p])%M;
			}
		}
	}
	for(int i=0;i<N;i++){
		for(int j=0;j<N;j++){
			int ans=0;
			for(int k=0;k<N;k++){
				ans+=sum[i][j][k];ans%=M;
				if(j) sum[i][j][k]=(sum[i][j-1][k]+ans)%M;
				else sum[i][j][k]=ans;
			}
		}
		for(int j=0;j<N;j++){
			for(int k=0;k<N;k++){
				if(i) sum[i][j][k]=(sum[i-1][j][k]+sum[i][j][k])%M;
			}
		}
	}
	while(q--){
		int a,b,c;cin>>a>>b>>c;
		cout<<sum[a][b][c]<<endl;
	}
}




signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int __T=1;//cin>>__T;
    while(__T--) solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 163ms
memory: 222736kb

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

input:

6 3
??????
2 2 2
2 3 3
3 3 3

output:

30
72
96

result:

ok 3 lines

Test #3:

score: -100
Wrong Answer
time: 140ms
memory: 221568kb

input:

1 1
?
0 1 1

output:

0

result:

wrong answer 1st lines differ - expected: '2', found: '0'