QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#713761#9536. Athlete Welcome CeremonyMu_Silk#RE 0ms0kbC++202.2kb2024-11-05 20:28:472024-11-05 20:28:47

Judging History

This is the latest submission verdict.

  • [2024-11-05 20:28:47]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2024-11-05 20:28:47]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll Mod=1e9+7;
ll dp[2][301][301][3];
ll n,q,used[301],sum[301][301][301];
char ok[301];
void solve(){
    cin>>n>>q;
    for(ll i=1;i<=n;i++) {cin>>ok[i];used[i]=used[i-1]+(ok[i]=='?');}
    ll now=0;
    if(ok[1]=='?') dp[0][1][0][0]=dp[0][0][1][1]=dp[0][0][0][2]=1;
    if(ok[1]=='a') dp[0][0][0][0]=1;
    if(ok[1]=='b') dp[0][0][0][1]=1;
    if(ok[1]=='c') dp[0][0][0][2]=1;
    for(ll i=2;i<=n;i++){
        now^=1;
        for(ll j=0;j<=used[i];j++) for(ll k=0;k<=used[i];k++){
            dp[now][j][k][0]=dp[now][j][k][1]=dp[now][j][k][2]=0;
            if(j+k>used[i]) break;
            if(ok[i]=='?'){
                if(j>=1) dp[now][j][k][0]=(dp[now^1][j-1][k][1]+dp[now^1][j-1][k][2])%Mod;
                if(k>=1) dp[now][j][k][1]=(dp[now^1][j][k-1][0]+dp[now^1][j][k-1][2])%Mod;
                if(j+k<used[i]) dp[now][j][k][2]=(dp[now^1][j][k][0]+dp[now^1][j][k][1])%Mod;
            }
            if(ok[i]=='a'){
                dp[now][j][k][0]=(dp[now^1][j][k][1]+dp[now^1][j][k][2])%Mod;
            }
            if(ok[i]=='b'){
                dp[now][j][k][1]=(dp[now^1][j][k][0]+dp[now^1][j][k][2])%Mod;
            }
            if(ok[i]=='c'){
                dp[now][j][k][2]=(dp[now^1][j][k][1]+dp[now^1][j][k][0])%Mod;
            }
        }
    }
    for(ll i=0;i<=used[n];i++) for(ll j=0;j<=used[n];j++) for(ll k=0;k<=used[n];k++){
        if(i+j+k==used[n]) {
            sum[i][j][k]=(dp[now][i][j][0]+dp[now][i][j][1]+dp[now][i][j][2])%Mod;
            
        }
        sum[i][j][k]+=(sum[i-1][j][k]+sum[i][j-1][k]+sum[i][j][k-1]-sum[i-1][j-1][k]-sum[i-1][j][k-1]-sum[i][j-1][k-1]+sum[i-1][j-1][k-1])%Mod;
        sum[i][j][k]=(sum[i][j][k]%Mod+Mod)%Mod;
      //  cout<<i<<" "<<j<<" "<<k<<" "<<sum[i][j][k]<<'\n';
    }
   // cout<<used[n]<<'\n';
    for(ll i=1;i<=q;i++){
        ll x,y,z;
        cin>>x>>y>>z;
        x=min(x,used[n]);
        y=min(y,used[n]);
        z=min(z,used[n]);
        cout<<sum[x][y][z]<<'\n';
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int n=1;
    //cin>>n;
    while(n--)solve();
    return 0;
}

詳細信息

Test #1:

score: 0
Runtime Error

input:

6 3
a?b??c
2 2 2
1 1 1
1 0 2

output:


result: