QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#740977#9536. Athlete Welcome CeremonyCSQ#RE 0ms0kbC++172.0kb2024-11-13 12:46:282024-11-13 12:46:31

Judging History

This is the latest submission verdict.

  • [2024-11-13 12:46:31]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2024-11-13 12:46:28]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
#define sz(x) (int)(x).size()
int dp[4][301][301][301];
int p[301][301][301];
const int MOD = 1e9+7;
void add(int &x,int y){
	x+=y;
	if(x>=MOD)x-=MOD;
}
int main()
{
	//cin.tie(0)->sync_with_stdio(0);
	//cin.exceptions(cin.failbit);
	int n,q;
	cin>>n>>q;
	string s;
	cin>>s;
	dp[0][0][0][0] = 1;
	vector<int>cnt(4,0);
	for(int i=1;i<=n;i++){
		int sum = 0;
		for(int j=0;j<=i;j++){
			for(int k=0;k<=i;k++){
				if(s[i-1] == 'a' || s[i-1] == '?'){
					for(int c=0;c<4;c++){
						if(c==1)continue;
						add(dp[1][i][j][k],dp[c][i-1][j][k]);
					}
				}	
				if((s[i-1] == 'b' || s[i-1] == '?') && j){
					for(int c=0;c<4;c++){
						if(c==2)continue;
						add(dp[2][i][j][k],dp[c][i-1][j-1][k]);
					}
				}	
				if((s[i-1] == 'c' || s[i-1] == '?') && k){
					for(int c=0;c<4;c++){
						if(c==3)continue;
						add(dp[3][i][j][k],dp[c][i-1][j][k-1]);
					}
				}
				//cout<<i<<" "<<j<<" "<<k<<'\n';
				//cout<<dp[1][i][j][k]<<'\n';
				//cout<<dp[2][i][j][k]<<'\n';
				//cout<<dp[3][i][j][k]<<'\n';
			}
		}
		if(s[i-1] == '?')cnt[0]++;
		if(s[i-1] == 'a')cnt[1]++;
		if(s[i-1] == 'b')cnt[2]++;
		if(s[i-1] == 'c')cnt[3]++;
	}
	for(int i=0;i<=n;i++){
		for(int j=0;j<=n;j++){
			for(int c=1;c<=3;c++){
				add(p[n-i-j][i][j],dp[c][n][i][j]);		
			}
			//if(p[n-i-j][i][j])cout<<n-i-j<<" "<<i<<" "<<j<<" "<<p[n-i-j][i][j]<<'\n';
		}
	}
	for(int i=0;i<=300;i++){
		for(int j=0;j<=300;j++){
            for(int k=0;k<=300;k++){
				if(i)add(p[i][j][k],p[i-1][j][k]);
				if(j)add(p[i][j][k],p[i][j-1][k]);
				if(k)add(p[i][j][k],p[i][j][k-1]);
				
				if(i && j)add(p[i][j][k],MOD-p[i-1][j-1][k]);
				if(i && k)add(p[i][j][k],MOD-p[i-1][j][k-1]);
				if(j && k)add(p[i][j][k],MOD-p[i][j-1][k-1]);
				
				if(i && j && k)add(p[i][j][k],p[i-1][j-1][k-1]);
			}				
		}
	}
	while(q--){
		int x,y,z;
		cin>>x>>y>>z;
		x = min(x+cnt[1],300);
		y = min(y+cnt[2],300);
		z = min(z+cnt[3],300);
		//cout<<x<<" "<<y<<" "<<z<<'\n';
		cout<<p[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: