QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#712921#9536. Athlete Welcome CeremonyWolam#WA 1ms5776kbC++202.8kb2024-11-05 17:29:402024-11-05 17:29:41

Judging History

This is the latest submission verdict.

  • [2024-11-05 17:29:41]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 5776kb
  • [2024-11-05 17:29:40]
  • Submitted

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();
}

详细

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'