QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#712921 | #9536. Athlete Welcome Ceremony | Wolam# | WA | 1ms | 5776kb | C++20 | 2.8kb | 2024-11-05 17:29:40 | 2024-11-05 17:29:41 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int M=1e9+7;
int n,q;
char s[305];
int f[305][155][155][3];
int ans[155][155][155];
int cnt[3];
void sol()
{
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>s[i];
cnt[s[i]-'a']++;
}
if(s[1]=='?')
f[1][1][0][0]=f[1][0][1][1]=f[1][0][0][2]=1;
else if(s[1]=='a')
f[1][1][0][0]=1;
else if(s[1]=='b')
f[1][0][1][1]=1;
else f[1][0][0][2]=1;
for(int i=2;i<=n;i++)
{
for(int j=0;j<=(i+1)/2;j++)
{
for(int k=0;k<=(i+1)/2&&j+k<=i;k++)
{
int l=i-j-k;
if(l>(i+1)/2)continue;
if(s[i]=='a')
{
if(j)
(f[i][j][k][0]+=f[i-1][j-1][k][1]+f[i-1][j-1][k][2])%=M;
}
else if(s[i]=='b')
{
if(k)
(f[i][j][k][1]+=f[i-1][j][k-1][0]+f[i-1][j][k-1][2])%=M;
}
else if(s[i]=='c')
{
if(l)
(f[i][j][k][2]+=f[i-1][j][k][0]+f[i-1][j][k][1])%=M;
}
else
{
if(j)
(f[i][j][k][0]+=f[i-1][j-1][k][1]+f[i-1][j-1][k][2])%=M;
if(k)
(f[i][j][k][1]+=f[i-1][j][k-1][0]+f[i-1][j][k-1][2])%=M;
if(l)
(f[i][j][k][2]+=f[i-1][j][k][0]+f[i-1][j][k][1])%=M;
}
}
}
}
for(int j=0;j<=(n+1)/2;j++)
{
for(int k=0;k<=(n+1)/2&&j+k<=n;k++)
{
int l=n-j-k;
if(l>(n+1)/2)continue;
ans[j][k][l]=(f[n][j][k][0]+f[n][j][k][1]+f[n][j][k][2])%M;
}
}
int lim=(n+1)/2;
for(int i=1;i<=lim;i++)
{
for(int j=1;j<=lim;j++)
{
for(int k=1;k<=lim;k++)
(ans[i][j][k]+=ans[i][j][k-1])%=M;
}
}
for(int i=1;i<=lim;i++)
{
for(int j=1;j<=lim;j++)
{
for(int k=1;k<=lim;k++)
(ans[i][j][k]+=ans[i][j-1][k])%=M;
}
}
for(int i=1;i<=lim;i++)
{
for(int j=1;j<=lim;j++)
{
for(int k=1;k<=lim;k++)
(ans[i][j][k]+=ans[i-1][j][k])%=M;
}
}
for(int i=1;i<=q;i++)
{
int x,y,z;
cin>>x>>y>>z;
x=min(lim,x+cnt[0]);
y=min(lim,y+cnt[1]);
z=min(lim,z+cnt[2]);
cout<<ans[x][y][z]<<'\n';
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int T=1;
//cin>>T;
while(T--)
sol();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 5672kb
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: 5776kb
input:
6 3 ?????? 2 2 2 2 3 3 3 3 3
output:
30 72 96
result:
ok 3 lines
Test #3:
score: -100
Wrong Answer
time: 1ms
memory: 5568kb
input:
1 1 ? 0 1 1
output:
0
result:
wrong answer 1st lines differ - expected: '2', found: '0'