QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#702010#9536. Athlete Welcome Ceremonyucup-team5296#WA 2ms10072kbC++203.2kb2024-11-02 15:06:402024-11-02 15:06:41

Judging History

This is the latest submission verdict.

  • [2024-11-02 15:06:41]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 10072kb
  • [2024-11-02 15:06:40]
  • Submitted

answer

#include<bits/stdc++.h>
#define ll long long
#define eb emplace_back
#define ep emplace
#define pii pair<int,int>
#define fi first
#define se second
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define mems(arr,x) memset(arr,x,sizeof(arr))
#define memc(arr1,arr2) memcpy(arr1,arr2,sizeof(arr2))
using namespace std;
const int maxn=310,mod=1e9+7;
bool mem1;
int n,q;
char s[maxn];
int dp[2][maxn][maxn][3];
int ss[maxn][maxn][maxn];
namespace FastMod{
    inline void madd(int &x,int y){x+=y;(x>=mod)&&(x-=mod);}
    inline void mdel(int &x,int y){x-=y;(x<0)&&(x+=mod);}
    inline void mmul(int &x,int y){x=1ll*x*y%mod;}
    inline int imadd(int x,int y){madd(x,y);return x;}
    inline int imdel(int x,int y){mdel(x,y);return x;}
    inline int immul(int x,int y){mmul(x,y);return x;}
    inline int qpow(int x,int y){int res=1;while(y){if(y&1) res=1ll*res*x%mod;x=1ll*x*x%mod;y>>=1;}return res;}
}
using namespace FastMod;
int sum[maxn];
bool mem2;
int main(){
    // debug("%.2fMB\n",abs(&mem1-&mem2)/1024./1024);
    scanf("%d%d%s",&n,&q,s+1);
    for(int i=1;i<=n;i++)   sum[i]=sum[i-1]+(s[i]=='?');
    if(s[1]=='a'||s[1]=='?')   dp[1][s[1]=='?'][0][0]=1;
    if(s[1]=='b'||s[1]=='?')   dp[1][0][s[1]=='?'][1]=1;
    if(s[1]=='c'||s[1]=='?')   dp[1][0][0][2]=1;
    for(int i=2;i<=n;i++){
        mems(dp[i&1],0);
        for(int a=0;a<=sum[i];a++){
            for(int b=0;a+b<=sum[i];b++){
                int c=sum[i]-a-b;
                if(s[i]=='a'||s[i]=='?'){
                    bool o=s[i]=='?';
                    for(int j:{1,2})    madd(dp[i&1][a+o][b][0],dp[(i-1)&1][a][b][j]);
                }
                if(s[i]=='b'||s[i]=='?'){
                    bool o=s[i]=='?';
                    for(int j:{0,2})    madd(dp[i&1][a][b+o][1],dp[(i-1)&1][a][b][j]);
                }
                if(s[i]=='c'||s[i]=='?')
                    for(int j:{0,1})    madd(dp[i&1][a][b][2],dp[(i-1)&1][a][b][j]);
            }
        }
    }
    for(int a=0;a<=sum[n];a++)
        for(int b=0;b<=sum[n];b++)
                ss[a][b][sum[n]-a-b]=imadd(dp[n&1][a][b][0],imadd(dp[n&1][a][b][1],dp[n&1][a][b][2]));
                // printf("%d %d %d : %d\n",a,b,c,ss[a][b][c]);
    int sn=sum[n];
    for (int i = 0; i <= sn; ++i) {
        for (int j = 0; j <= sn; ++j) {
            for (int k = 0; k <= sn; ++k) {
                // ss[i][j][k] = dp[n&1][i][j][k];

                if (i > 0) madd(ss[i][j][k],ss[i-1][j][k]);
                if (j > 0) madd(ss[i][j][k],ss[i][j-1][k]);
                if (k > 0) madd(ss[i][j][k],ss[i][j][k-1]);

                if (i > 0 && j > 0) mdel(ss[i][j][k],ss[i-1][j-1][k]);
                if (i > 0 && k > 0) mdel(ss[i][j][k],ss[i-1][j][k-1]);
                if (j > 0 && k > 0) mdel(ss[i][j][k],ss[i][j-1][k-1]);

                if (i > 0 && j > 0 && k > 0) madd(ss[i][j][k],ss[i-1][j-1][k-1]);
            }
        }
    }

    while(q--){
        int x,y,z,ans=0;scanf("%d%d%d",&x,&y,&z);
        ans=ss[x][y][z];
        // for(int i=0;i<=x;i++)
        //     for(int j=0;j<=y;j++)
        //             if(sum[n]-i-j<=z)
        //                 for(int k:{0,1,2})
        //                     madd(ans,dp[n&1][i][j][k]);
        printf("%d\n",ans);
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 6528kb

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: 2ms
memory: 10072kb

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: 1ms
memory: 5868kb

input:

1 1
?
0 1 1

output:

2

result:

ok single line: '2'

Test #4:

score: -100
Wrong Answer
time: 0ms
memory: 7004kb

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'