原题链接:M As far as I know
这道题只需要记录字符串knowiasfaras中,每个字符对应的前一个字符的个数累加取模,最后输出最后一个字符存储的数据就可以了,废话不多说,直接放出代码
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using ull=unsigned long long;
const int mod=998244353;
int main(){
string s,m;
m="asfarasiknow";
cin>>s;
vector<ull>v(m.size(),0);
for(int i=0;i<s.size();i++){
if(s[i]=='a'){
v[0]++;
v[3]+=v[2]; v[3]%=mod; //好事多模
v[5]+=v[4]; v[5]%=mod;
}
else if(s[i]=='s'){
v[1]+=v[0]; v[1]%=mod;
v[6]+=v[5]; v[6]%=mod;
}
else if(s[i]=='f'){
v[2]+=v[1]; v[2]%=mod;
}
else if(s[i]=='r'){
v[4]+=v[3]; v[4]%=mod;
}
else if(s[i]=='i'){
v[7]+=v[6]; v[7]%=mod;
}
else if(s[i]=='k'){
v[8]+=v[7]; v[8]%=mod;
}
else if(s[i]=='n'){
v[9]+=v[8]; v[9]%=mod;
}
else if(s[i]=='o'){
v[10]+=v[9]; v[10]%=mod;
}
else if(s[i]=='w'){
v[11]+=v[10]; v[11]%=mod;
}
}
cout<<v[11]<<endl;
return 0;
}