QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#788899#9536. Athlete Welcome CeremonysjcxWA 1ms10044kbC++141.9kb2024-11-27 18:39:492024-11-27 18:39:49

Judging History

This is the latest submission verdict.

  • [2024-11-27 18:39:49]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 10044kb
  • [2024-11-27 18:39:49]
  • Submitted

answer

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
#include<random>
#include<ctime>
using namespace std;
#define re int
#define ll long long
inline ll read(){
    ll x=0,ff=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')ff=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^'0');c=getchar();}
    return x*ff;
}
const int mn=1e9+7;
inline int md(int x){return x>=mn?x-mn:x;}
int f[302][302][302][3],n,q;
char c[305];
int main(){
	n=read();q=read();scanf("%s",c+1);int now=0;
	if(c[1]=='?'){f[1][0][0][0]=f[0][1][0][1]=f[0][0][1][2]=1;now=1;}
	else {f[0][0][0][c[1]-'a']=1;}
	for(re i=2;i<=n;i++){
		if(c[i]=='?'){
			now++;
			for(re j=0;j<now;j++){
				for(re l=0;l+j<now;l++){
					f[j+1][l][now-j-l-1][0]=md(f[j][l][now-j-l-1][1]+f[j][l][now-j-l-1][2]);
					f[j][l+1][now-j-l-1][1]=md(f[j][l][now-j-l-1][0]+f[j][l][now-j-l-1][2]);
					f[j][l][now-j-l][2]=md(f[j][l][now-j-l-1][1]+f[j][l][now-j-l-1][0]);
				}
			}
		}
		else {
			for(re j=0;j<=now;j++){
				for(re l=0;l+j<=now;l++){
					f[j][l][now-j-l][c[i]-'a']=md(md(f[j][l][now-j-l][0]+md(f[j][l][now-j-l][1]+f[j][l][now-j-l][2]))-f[j][l][now-j-l][c[i]-'a']+mn);
					for(re r=0;r<=2;r++)if(r!=c[i]-'a')f[j][l][now-j-l][r]=0;
				}
			}
		}
	}
	for(re i=0;i<=now;i++){
		for(re j=0;j<=now;j++){
			for(re l=0;l<=now;l++){
				f[i][j][l][0]=md(f[i][j][l][0]+md(f[i][j][l][1]+f[i][j][l][2]));
				if(i+j+l!=now)f[i][j][l][0]=0;
				if(j)f[i][j][l][0]=md(f[i][j][l][0]+f[i][j-1][l][0]);
				if(l)f[i][j][l][0]=md(f[i][j][l][0]+f[i][j][l-1][0]);
				if(j&&l)f[i][j][l][0]=md(f[i][j][l][0]+mn-f[i][j-1][l-1][0]);
			}
		}
	}
	int x,y,z,s;
	while(q--){s=0;
		x=read();y=read();z=read();
		for(re i=0;i<=x;i++){
			//cerr<<i<<" "<<y<<" "<<z<<" "<<f[i][y][z][0]<<endl;
			s=md(s+f[i][y][z][0]);
		}
		printf("%d\n",s);
	}
    return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 7968kb

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: 1ms
memory: 10044kb

input:

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

output:

30
72
96

result:

ok 3 lines

Test #3:

score: 0
Accepted
time: 1ms
memory: 5940kb

input:

1 1
?
0 1 1

output:

2

result:

ok single line: '2'

Test #4:

score: -100
Wrong Answer
time: 0ms
memory: 3856kb

input:

10 10
acab?cbaca
0 2 0
1 1 2
4 2 3
1 1 1
3 5 1
0 5 2
2 2 0
1 2 5
4 3 0
1 1 3

output:

0
0
0
1
0
0
0
0
0
0

result:

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