QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#734648#9536. Athlete Welcome CeremonyDixiky_215WA 1ms32612kbC++203.6kb2024-11-11 13:38:492024-11-11 13:38:50

Judging History

This is the latest submission verdict.

  • [2024-11-11 13:38:50]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 32612kb
  • [2024-11-11 13:38:49]
  • 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[n]+1;i++)
    {
        for(int j=1;j<=num[n]+1;j++)
        {
            for(int k=1;k<=num[n]+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: 100
Accepted
time: 0ms
memory: 20004kb

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: 0ms
memory: 32612kb

input:

6 3
??????
2 2 2
2 3 3
3 3 3

output:

30
72
96

result:

ok 3 lines

Test #3:

score: 0
Accepted
time: 0ms
memory: 9712kb

input:

1 1
?
0 1 1

output:

2

result:

ok single line: '2'

Test #4:

score: -100
Wrong Answer
time: 1ms
memory: 11812kb

input:

10 10
acab?cbaca
0 2 0
1 1 2
4 2 3
1 1 1
3 5 1
0 5 2
2 2 0
1 2 5
4 3 0
1 1 3

output:

0
0
0
1
0
0
0
0
0
0

result:

wrong answer 2nd lines differ - expected: '1', found: '0'