QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#733442 | #9536. Athlete Welcome Ceremony | P3KO | WA | 0ms | 28224kb | C++17 | 1.4kb | 2024-11-10 19:01:11 | 2024-11-10 19:01:12 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD=1e9+7;
const int MAXN=3e2+5;
int n,q;
char s[MAXN];
ll dp[MAXN][3][MAXN][MAXN],f[MAXN][MAXN][MAXN],sum[MAXN][MAXN][MAXN];
void solve(){
cin>>n>>q>>(s+1);
int cnt=0;
for(int i=1;i<=n;i++)if(s[i]=='?')cnt++;
if(s[1]!='?')dp[1][s[1]-'a'][0][0]=1;
else dp[1][0][1][0]=1,dp[1][1][0][1]=1,dp[1][2][0][0]=1;
for(int i=2;i<=n;i++)for(int x=0;x<=cnt;x++)for(int y=0;y<=cnt-x;y++){
if(s[i]!='?'){
dp[i][s[i]-'a'][x][y]=(dp[i-1][(s[i]-'a'+1)%3][x][y]+dp[i-1][(s[i]-'a'+2)%3][x][y])%MOD;
dp[i][(s[i]-'a'+1)%3][x][y]=0;
dp[i][(s[i]-'a'+2)%3][x][y]=0;
}else{
dp[i][0][x][y]=x>0?(dp[i-1][1][x-1][y]+dp[i-1][2][x-1][y])%MOD:0;
dp[i][1][x][y]=y>0?(dp[i-1][0][x][y-1]+dp[i-1][2][x][y-1])%MOD:0;
dp[i][2][x][y]=x+y<cnt?(dp[i-1][0][x][y]+dp[i-1][1][x][y])%MOD:0;
}
}
for(int i=0;i<=cnt;i++)for(int j=0;j<cnt-i;j++)
f[i][j][cnt-i-j]=(dp[n][0][i][j]+dp[n][1][i][j]+dp[n][2][i][j])%MOD;
for(int i=0;i<=n;i++)for(int j=0;j<=n;j++)for(int k=0;k<=n;k++)
sum[i][j][k]=(f[i][j][k]+(i>0?sum[i-1][j][k]:0)+(j>0?sum[i][j-1][k]:0)+(k>0?sum[i][j][k-1]:0)
-(i>0&&j>0?sum[i-1][j-1][k]:0)-(i>0&&k>0?sum[i-1][j][k-1]:0)-(j>0&&k>0?sum[i][j-1][k-1]:0)
+(i>0&&j>0&&k>0?sum[i-1][j-1][k-1]:0)+3*MOD)%MOD;
for(int i=1;i<=q;i++){
int x,y,z;cin>>x>>y>>z;
cout<<sum[x][y][z]<<"\n";
}
}
int main(){
int t;t=1;
while(t--){
solve();
}
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 26148kb
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: -100
Wrong Answer
time: 0ms
memory: 28224kb
input:
6 3 ?????? 2 2 2 2 3 3 3 3 3
output:
30 72 94
result:
wrong answer 3rd lines differ - expected: '96', found: '94'