Submission #1262493

#TimeUsernameProblemLanguageResultExecution timeMemory
1262493hahaSelling RNA Strands (JOI16_selling_rna)C++20
0 / 100
110 ms23112 KiB
#include <bits/stdc++.h> #define ll long long #define f first #define s second using namespace std; const int maxn=5e3+5; const int base=31; const ll MOD=1e9+7; int n,m; string s[maxn]; string p,q; vector<ll> Hs[maxn]; ll Pow[100005]; ll get(int i,int j,int k) { return (Hs[k][j]-Hs[k][i-1]*Pow[j-i+1]+MOD*MOD)%MOD; } int main() { Pow[0]=1; for(int i=1;i<=1e5;i++) Pow[i]=(Pow[i-1]*base)%MOD; cin>>n>>m; for(int i=1;i<=n;i++){ cin>>s[i]; int len=s[i].size(); s[i]=" "+s[i]; Hs[i].push_back(0); for(int j=1;j<=len;j++){ Hs[i].push_back((Hs[i][j-1]*base+s[i][j]-'A'+1)%MOD); } } for(int i=1;i<=m;i++){ cin>>p>>q; ll hp=0,hq=0; for(int j=0;j<p.size();j++) hp=(hp*base+p[j]-'A'+1)%MOD; for(int j=0;j<q.size();j++) hq=(hq*base+q[j]-'A'+1)%MOD; int ans=0; for(int j=1;j<=n;j++){ ll pre=get(1,p.size(),j); ll suf=get(s[j].size()-q.size(),s[j].size()-1,j); if(pre==hp&&suf==hq) ans++; } cout<<ans<<'\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...