QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#783710 | #8080. Pa?sWorD | fsdhmbb# | WA | 196ms | 3780kb | C++14 | 5.8kb | 2024-11-26 11:29:28 | 2024-11-26 11:29:28 |
Judging History
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;
// }
Details
Tip: Click on the bar to expand more detailed information
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'