QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#783710#8080. Pa?sWorDfsdhmbb#WA 196ms3780kbC++145.8kb2024-11-26 11:29:282024-11-26 11:29:28

Judging History

你现在查看的是最新测评结果

  • [2024-11-26 11:29:28]
  • 评测
  • 测评结果:WA
  • 用时:196ms
  • 内存:3780kb
  • [2024-11-26 11:29:28]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
const int mod=998244353;
int n;
string s;
int f[2][65][8];
int remap(char ch)
{
    if(ch=='?') return -1;
    if(ch>='0'&&ch<='9') return ch-'0';
    else if(ch>='A'&&ch<='Z') return ch-'A'+10;
    else return ch-'a'+36;
}
int remap2(int x)
{
    if(x==-1) return -1;
    if(x<10) return 1;
    else if(x<36) return 2;
    else return 4;
}
int main() 
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    cin>>s;
    int now=0;
    for(int j=0;j<62;j++)
    {
        if(remap(s[0])==-1||remap(s[0])==j||(remap(s[0])>=36&&remap(s[0])-26==j))
            f[now][j][remap2(j)]=1;
    }
    // for(int j=0;j<62;j++)
    // {
    //     cout<<j<<" ";
    //     for(int k=0;k<8;k++)
    //     {
    //         cout<<f[now][j][k]<<" ";
    //     }
    //     cout<<endl;
    // }
    for(int i=1;i<s.size();i++)
    {
        now=now^1;
        int x=remap(s[i]);
        for(int k=0;k<8;k++)
        {
            int sum=0;
            for(int j=0;j<62;j++) sum=(sum+f[now^1][j][k])%mod;
            for(int j=0;j<62;j++)
            {
                if(x==-1||x==j||(x>=36&&x-26==j))
                {
                    f[now][j][k|remap2(j)]=((f[now][j][k|remap2(j)]+sum)%mod-f[now^1][j][k]+mod)%mod;
                }
            }
        }
    }
    int ans=0;
    for(int i=0;i<62;i++) ans=(ans+f[now][i][7])%mod;
    cout<<ans<<endl;
    return 0;
}
// int remap2(char ch)
// {
//     if(remap(ch)<10) return 0;
//     else if(remap(ch)<36) return 1;
//     else return 2;
// }
// int remap3(int x)
// {
//     if(x<10) return 0;
//     else if(x<36) return 1;
//     else return 2;
// }
// signed main()
// {
//     ios::sync_with_stdio(0);
//     cin.tie(0);
//     cout.tie(0);
//     cin>>n;
//     cin>>s;
//     int now=0;
//     if(s[0]=='?')
//     {
//         for(int i=0;i<62;i++)
//         {
//             if(1!=s.size()&&s[1]!='?'&&remap(s[i+1])==i) continue;
//             f[now][i][1<<(remap3(i))]=1;
//         }
//     }
//     else if(remap(s[0])<36) f[now][remap(s[0])][1<<remap2(s[0])]=1;
//     else 
//     {
//         if(s.size()==1||s[1]=='?'||remap(s[1])!=remap(s[0])) f[now][remap(s[0])][1<<remap2(s[0])]=1;
//         if(s.size()==1||s[1]=='?'||remap(s[1])!=remap(s[0])-26) f[now][remap(s[0])-26][1<<remap3(remap(s[0])-26)]=1;
//     }
//     for(int i=1;i<(int)s.size();i++)
//     {
//         now=now^1;
//         for(int j=0;j<62;j++) for(int k=0;k<8;k++) f[now][j][k]=0;
//         if(s[i]=='?')
//         {
//             int sum[8]={0};
//             for(int j=0;j<62;j++)
//             {
//                 for(int k=0;k<8;k++)
//                 {
//                     sum[k]=(sum[k]+f[now^1][j][k])%mod;
//                 }
//             }
//             // for(int j=0;j<62;j++)
//             // {
//             //     if(i!=s.size()-1&&s[i+1]!='?'&&remap(s[i+1])==j) continue;
//             //     int sum2=0;
//             //     for(int k=0;k<8;k++) sum2=(sum-f[now^1][j][k]+mod)%mod;
//             //     for(int k=0;k<8;k++)
//             //     {
//             //         if(!((1<<remap3(j))&k)) continue;
//             //         f[now][j][k]=(f[now][j][k]+sum2)%mod;
//             //     }
//             // }
//             for(int j=0;j<62;j++)
//             {
//                 if(i!=(int)s.size()-1&&s[i+1]!='?'&&remap(s[i+1])==j) continue;
//                 // cout<<j<<" ";
//                 int sum2[8]={0};
//                 for(int k=0;k<8;k++) sum2[k]=(sum[k]-f[now^1][j][k]+mod)%mod;
//                 for(int k=0;k<8;k++)
//                 {
//                     if(!((1<<remap3(j))&k)) continue;
//                     f[now][j][k]=(f[now][j][k]+(sum2[k]+sum2[(1<<(remap3(j)))^k]))%mod;
//                 }
//             }
//         }
//         else if(remap(s[i])<36)
//         {
//             for(int j=0;j<62;j++)
//             {
//                 for(int k=0;k<8;k++)
//                 {
//                     f[now][remap(s[i])][k|(1<<remap2(s[i]))]+=f[now^1][j][k];
//                     f[now][remap(s[i])][k|(1<<remap2(s[i]))]%=mod;
//                 }
//             }
//         }
//         else
//         {
//             if(i==(int)s.size()-1||s[i+1]=='?'||remap(s[i+1])!=remap(s[i]))
//             {
//                 for(int j=0;j<62;j++)
//                 {
//                     for(int k=0;k<8;k++)
//                     {
//                         f[now][remap(s[i])][k|(1<<remap2(s[i]))]+=f[now^1][j][k];
//                         f[now][remap(s[i])][k|(1<<remap2(s[i]))]%=mod;
//                     }
//                 }
//             }
//             if(i==(int)s.size()-1||s[i+1]=='?'||remap(s[i+1])!=remap(s[i])-26)
//             {
//                 for(int j=0;j<62;j++)
//                 {
//                     for(int k=0;k<8;k++)
//                     {
//                         f[now][remap(s[i])-26][k|(1<<remap3(remap(s[i])-26))]+=f[now^1][j][k];
//                         f[now][remap(s[i])-26][k|(1<<remap3(remap(s[i])-26))]%=mod;
//                     }
//                 }
//             }
//         }
//         // if(i==3)
//         // {
//         //     for(int j=0;j<62;j++)
//         //     {
//         //         cout<<j<<" ";
//         //         for(int k=0;k<8;k++) cout<<f[now][j][k]<<" ";
//         //         cout<<endl;
//         //     }
//         // }
//     }
//     // for(int j=0;j<62;j++)
//     // {
//     //     cout<<j<<" ";
//     //     for(int k=0;k<8;k++) cout<<f[now][j][k]<<" ";
//     //     cout<<endl;
//     // }
//     int ans=0;
//     for(int i=0;i<62;i++) ans=(ans+f[now][i][7])%mod;
//     cout<<ans<<endl;
//     return 0;
// }

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3700kb

input:

4
a?0B

output:

86

result:

ok single line: '86'

Test #2:

score: -100
Wrong Answer
time: 196ms
memory: 3780kb

input:

100000
1kQOIXnSMDlMqJcA8Ae6ov3DfVWAk0I16BgJ3tW1A6ERqBOy4kYizhqPUAU9DrUK26oQ8tgVQW0sRIcg0J2moqS6rRc5lh6QBtzFNfVDvU?sHilmsDIsywXDEeCy8bFracBGSwWNnkLa49E7d9JNXS1QsWPRoYV6IwSvdLdeYMczFmy7G56rxql6YXsX8AaWRLfxqukM5ovPzuSCTpSpN5?OaCE8xb8xu7xJ4A2pOHTOxe1EStiTlWMLeoM5qW6ULwCK4Dtcru8sjqaTilMzLvU27DcJnUhweXT80...

output:

560616193

result:

wrong answer 1st lines differ - expected: '483479164', found: '560616193'