QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#734646#9536. Athlete Welcome CeremonyDixiky_215WA 0ms19976kbC++203.6kb2024-11-11 13:38:252024-11-11 13:38:26

Judging History

This is the latest submission verdict.

  • [2024-11-11 13:38:26]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 19976kb
  • [2024-11-11 13:38:25]
  • Submitted

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

Details

Tip: Click on the bar to expand more detailed information

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'