Submission #1280838

#TimeUsernameProblemLanguageResultExecution timeMemory
1280838courte_.sanmaSelling RNA Strands (JOI16_selling_rna)C++20
0 / 100
1601 ms294788 KiB
#include<bits/stdc++.h> using namespace std; const int N=2e6+6; int n,q; string s[N]; struct trie { struct Node { vector<int> v; int child[4]; void init() { memset(child,-1,sizeof(child)); } } node[N]; int cur; trie() { cur=0; node[cur].init(); } int new_node() { ++cur; node[cur].init(); return cur; } void add(string s, int id) { int p=0; for (char c:s) { int &nxt=node[p].child[c-'0']; if (nxt==-1) { nxt=new_node(); } p=nxt; node[p].v.push_back(id); } } vector<int> get(string s) { int p=0; for (char c:s) { p=node[p].child[c-'0']; } return node[p].v; } } t1,t2; void compress(string &s) { for (int i=0; i<s.length(); ++i) { if (s[i]=='A') s[i]='0'; if (s[i]=='G') s[i]='1'; if (s[i]=='U') s[i]='2'; if (s[i]=='C') s[i]='3'; } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n>>q; for (int i=1; i<=n; ++i) { cin>>s[i]; compress(s[i]); } for (int i=1; i<=n; ++i) { t1.add(s[i],i); reverse(s[i].begin(),s[i].end()); t2.add(s[i],i); } while (q--) { string l,r; cin>>l>>r; compress(l); compress(r); vector<int> a=t1.get(l); vector<int> b=t2.get(r); int i=0, j=0; int res=0; for (int i=0; i<a.size(); ++i) { while (j<b.size() && b[j]<a[i]) ++j; if (b[j]==a[i]) ++res; } cout<<res<<'\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...