QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#734646 | #9536. Athlete Welcome Ceremony | Dixiky_215 | WA | 0ms | 19976kb | C++20 | 3.6kb | 2024-11-11 13:38:25 | 2024-11-11 13:38:26 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN=5e5+7;
int t;
int a[MAXN];
int n,m;
string b;
ll dp[2][303][303][303][4];
ll ans[303][303][303];
ll mod=1e9+7LL;
int num[MAXN];
int main() {
cin.tie(nullptr) -> sync_with_stdio(false);
cin>>n>>m;
cin>>b;
b=' '+b;
if(b[1]=='?')
{
dp[0][0][0][1][3]=1LL;
dp[0][0][1][0][2]=1LL;
dp[0][1][0][0][1]=1LL;
}
else
{
dp[0][0][0][0][b[1]-'a'+1]=1LL;
}
for(int i=1;i<=n;i++)
{
if(b[i]=='?') num[i]=num[i-1]+1;
else num[i]=num[i-1];
}
for(int i=2;i<=n;i++)
{
if(b[i]=='?')
{
for(int s1=0;s1<=num[i];s1++)
{
for(int s2=0;s2<=num[i]-s1;s2++)
{
for(int s3=0;s3<=num[i]-s1-s2;s3++)
{
if(s1>0) dp[1][s1][s2][s3][1]+=dp[0][s1-1][s2][s3][2]+dp[0][s1-1][s2][s3][3];
if(s2>0) dp[1][s1][s2][s3][2]+=dp[0][s1][s2-1][s3][1]+dp[0][s1][s2-1][s3][3];
if(s3>0) dp[1][s1][s2][s3][3]+=dp[0][s1][s2][s3-1][1]+dp[0][s1][s2][s3-1][2];
dp[1][s1][s2][s3][1]%=mod;
dp[1][s1][s2][s3][2]%=mod;
dp[1][s1][s2][s3][3]%=mod;
}
}
}
}
else
{
for(int s1=0;s1<=num[i];s1++)
{
for(int s2=0;s2<=num[i]-s1;s2++)
{
for(int s3=0;s3<=num[i]-s1-s2;s3++)
{
if(b[i]=='a')
{
dp[1][s1][s2][s3][1]+=dp[0][s1][s2][s3][2]+dp[0][s1][s2][s3][3];
dp[1][s1][s2][s3][1]%=mod;
}
else if(b[i]=='b')
{
dp[1][s1][s2][s3][2]+=dp[0][s1][s2][s3][1]+dp[0][s1][s2][s3][3];
dp[1][s1][s2][s3][2]%=mod;
}
else
{
dp[1][s1][s2][s3][3]+=dp[0][s1][s2][s3][1]+dp[0][s1][s2][s3][2];
dp[1][s1][s2][s3][3]%=mod;
}
}
}
}
}
for(int s1=0;s1<=num[i];s1++)
{
for(int s2=0;s2<=num[i]-s1;s2++)
{
for(int s3=0;s3<=num[i]-s1-s2;s3++)
{
for(int k=1;k<=3;k++)
{
dp[0][s1][s2][s3][k]=dp[1][s1][s2][s3][k];
dp[1][s1][s2][s3][k]=0;
}
}
}
}
}
// cerr<<dp[0][1][1][1]<<" sad"<<endl;
for(int i=1;i<=num[i]+1;i++)
{
for(int j=1;j<=num[i]+1;j++)
{
for(int k=1;k<=num[i]+1;k++)
{
int s1=i-1,s2=j-1,s3=k-1;
ll sumk=dp[0][s1][s2][s3][1]+dp[0][s1][s2][s3][2]+dp[0][s1][s2][s3][3];
sumk+=ans[i-1][j][k]+ans[i][j-1][k]+ans[i][j][k-1];
sumk-=ans[i-1][j-1][k]+ans[i-1][j][k-1]+ans[i][j-1][k-1];
sumk+=ans[i-1][j-1][k-1];
ans[i][j][k]=(sumk%mod+mod)%mod;
}
}
}
while(m--)
{
int s1,s2,s3;
cin>>s1>>s2>>s3;
cout<<ans[s1+1][s2+1][s3+1]<<'\n';
}
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 19976kb
input:
6 3 a?b??c 2 2 2 1 1 1 1 0 2
output:
0 1 0
result:
wrong answer 1st lines differ - expected: '3', found: '0'