Submission #92826

#TimeUsernameProblemLanguageResultExecution timeMemory
92826LittleFlowers__Selling RNA Strands (JOI16_selling_rna)C++14
35 / 100
1570 ms210624 KiB
#include <bits/stdc++.h> using namespace std; const int N=2000010; int n,m,G,Il,Ir; int Tl[N][4],Tr[N][4]; int C[N]; vector<int> Fl[N],Fr[N]; string s; void add(int i) { cin>>s; for(auto & c : s) { if(c=='G') c='B'; if(c=='U') c='D'; } G=0; for(auto & c : s) { if(!Tl[G][c-'A']) Tl[G][c-'A']=++Il; G=Tl[G][c-'A']; Fl[G].push_back(i); } reverse(s.begin(),s.end()); G=0; for(auto & c : s) { if(!Tr[G][c-'A']) Tr[G][c-'A']=++Ir; G=Tr[G][c-'A']; Fr[G].push_back(i); } } void get() { G=0; cin>>s; for(auto & c : s) { if(c=='G') c='B'; if(c=='U') c='D'; } for(auto & c : s) { G=Tl[G][c-'A']; if(!G) break; } int GG=G; for(auto & i : Fl[G]) C[i]++; G=0; cin>>s; for(auto & c : s) { if(c=='G') c='B'; if(c=='U') c='D'; } reverse(s.begin(),s.end()); for(auto & c : s) { G=Tr[G][c-'A']; if(!G) break; } int ans=0; for(auto & i : Fr[G]) ans+=C[i]; for(auto & i : Fl[GG]) C[i]=0; cout<<ans<<"\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); //freopen("RNA.inp","r",stdin); cin>>n>>m; for(int i=0; i<n; ++i) add(i); for(int i=0; i<m; ++i) get(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...