QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#717929#9536. Athlete Welcome CeremonyQF_love_younger_sisterWA 537ms120964kbC++234.0kb2024-11-06 19:18:032024-11-06 19:18:08

Judging History

This is the latest submission verdict.

  • [2024-11-06 19:18:08]
  • Judged
  • Verdict: WA
  • Time: 537ms
  • Memory: 120964kb
  • [2024-11-06 19:18:03]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
const int N=305;
const int mod=1e9+7;
int dp[N][N][N][4],dp2[N][N][N];
int n,q;
string s;
signed main(){
//	ios::sync_with_stdio(0),cin.tie(0);
	cin >> n >> q;
	cin >> s;
	if(s[0]=='?'){
		dp[0][0][0][3]=1;
		dp[0][0][1][2]=1;
		dp[0][1][0][1]=1;
	}
	for(int i=2; i<=n; i++){
		for(int j=0; j<=i; j++){
			for(int k=0; j+k<=i; k++){
				if(s[i-1]=='?'){
					if(i-2>=0&&s[i-2]=='a'){
						if(i<n && s[i]=='b'){
							dp[i][j][k][3]=dp[i-1][j][k][0]%mod;
							if(dp[i][j][k][3]==0) dp[i][j][k][3]=1;
						}
						else if(i<n && s[i]=='c'){
							dp[i][j][k][2]=dp[i-1][j][k-1][0]%mod;
							if(dp[i][j][k][2]==0) dp[i][j][k][2]=1;
						}
						else{
							dp[i][j][k][2]=dp[i-1][j][k][0];
							dp[i][j][k][3]=dp[i-1][j][k-1][0];
							if(dp[i][j][k][2]==0) dp[i][j][k][2]=1;
							if(dp[i][j][k][3]==0) dp[i][j][k][3]=1;
						}
						continue;
					}
					if(i-2>=0&&s[i-2]=='b'){
						if(i<n && s[i]=='a'){
							dp[i][j][k][3]=dp[i-1][j][k][0]%mod;
							if(dp[i][j][k][3]==0) dp[i][j][k][3]=1;
						}
						else if(i<n && s[i]=='c'){
							dp[i][j][k][1]=dp[i-1][j-1][k][0]%mod;
							if(dp[i][j][k][1]==0) dp[i][j][k][1]=1;
						}
						else{
							dp[i][j][k][1]=dp[i-1][j][k][0];
							dp[i][j][k][3]=dp[i-1][j-1][k][0];
							if(dp[i][j][k][1]==0) dp[i][j][k][1]=1;
							if(dp[i][j][k][3]==0) dp[i][j][k][3]=1;
						}
						continue;
					}
					if(i-2>=0&&s[i-2]=='c'){
						if(i<n && s[i]=='a'){
							dp[i][j][k][2]=dp[i-1][j][k-1][0];
							if(dp[i][j][k][2]==0) dp[i][j][k][2]=1;
						}
						else if(i<n && s[i]=='b'){
							dp[i][j][k][1]=dp[i-1][j-1][k][0];
							if(dp[i][j][k][1]==0) dp[i][j][k][1]=1;
						}
						else{
							dp[i][j][k][1]=dp[i-1][j][k-1][0];
							dp[i][j][k][2]=dp[i-1][j-1][k][0];
							if(dp[i][j][k][1]==0) dp[i][j][k][1]=1;
							if(dp[i][j][k][2]==0) dp[i][j][k][2]=1;
						}
						continue;
					}
					if(i-2>=0){
						if(i<n && s[i]=='a'){
							dp[i][j][k][2]=dp[i-1][j][k-1][3];
							dp[i][j][k][3]=dp[i-1][j][k][2];
							if(dp[i][j][k][2]==0) dp[i][j][k][2]=1;
							if(dp[i][j][k][3]==0) dp[i][j][k][3]=1;
							continue;
						}
						else if(i<n && s[i]=='b'){
							dp[i][j][k][1]=dp[i-1][j-1][k][3];
							dp[i][j][k][3]=dp[i-1][j][k][1];
							if(dp[i][j][k][1]==0) dp[i][j][k][1]=1;
							if(dp[i][j][k][3]==0) dp[i][j][k][3]=1;
							continue;
						}
						else if(i<n && s[i]=='c'){
							dp[i][j][k][1]=dp[i-1][j-1][k][2];
							dp[i][j][k][2]=dp[i-1][j][k-1][1];
							if(dp[i][j][k][1]==0) dp[i][j][k][1]=1;
							if(dp[i][j][k][2]==0) dp[i][j][k][2]=1;		
							continue;
						}
						dp[i][j][k][1]=dp[i-1][j-1][k][1]+dp[i-1][j-1][k][2]+dp[i-1][j-1][k][3];
						dp[i][j][k][2]=dp[i-1][j][k-1][1]+dp[i-1][j][k-1][2]+dp[i-1][j][k-1][3];
						dp[i][j][k][3]=dp[i-1][j][k][1]+dp[i-1][j][k][2]+dp[i-1][j][k][3];
					}
				}
				else{
					dp[i][j][k][0]=dp[i-1][j][k][0]+dp[i-1][j-1][k][1]+dp[i-1][j][k][2]+dp[i-1][j][k-1][3];
				}
//				cout << dp[i][j][k][0] << dp[i][j][k][1] << dp[i][j][k][2] << dp[i][j][k][3] << " " << i << ' ' << j << ' ' << k <<endl;
			}
		}
	}
	//全部向左平移了一个单位 
	for(int i=0; i<=n; i++){
		for(int j=0; i+j<=n; j++){
			dp2[i+1][j+1][n+1-i-j]=dp[n][i][j][0]+dp[n][i][j][1]+dp[n][i][j][2]+dp[n][i][j][3];
		}
	}
	for(int i=1; i<=301; i++){
		for(int j=1; j<=301; j++){
			for(int k=1; k<=301; k++){
				dp2[i][j][k]=(((((((dp2[i-1][j][k]+dp2[i][j-1][k])%mod+dp2[i][j][k-1])%mod+mod-dp2[i-1][j-1][k])%mod+mod-dp2[i-1][j][k-1])%mod+mod-dp2[i][j-1][k-1])%mod+dp2[i-1][j-1][k-1])%mod+dp2[i][j][k])%mod;
			}
		}
	}
//	for(int i=1; i<=3; i++){
		for(int j=0; j<=3; j++){
			for(int k=0; k<=3; k++){
//				cout << dp[n][j][k][0] << dp[n][j][k][1] << dp[n][j][k][2] << dp[n][j][k][3] << ' ' << j << ' ' << k <<endl;
		}
	}
//	}
	cout << "\n";
	while(q--){
		int a,b,c;
		cin >> a >> b >> c;
		cout << dp2[a+1][b+1][c+1] << "\n";
	}
	return 0;
}  

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 537ms
memory: 120964kb

input:

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

output:


2
0
0

result:

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