Submission #197724

#TimeUsernameProblemLanguageResultExecution timeMemory
197724TAISA_Selling RNA Strands (JOI16_selling_rna)C++14
100 / 100
408 ms238200 KiB
#include<bits/stdc++.h> #define all(v) v.begin(),v.end() using namespace std; using ll=long long; using vi=vector<ll>; using P=pair<int,int>; int idx[26]; struct Node{ char c; int idx,out; Node* to[4]; vector<int> vs; Node(char cc){ c=cc; idx=-1; out=-1; for(int i=0;i<4;i++){ to[i]=nullptr; } } }; struct Trie{ Node* rt; Trie(){ rt=new Node('Z'); } Node* insert(string& s,int t){ Node* now=rt; for(int i=0;i<s.length();i++){ Node* par=now; now=par->to[idx[s[i]-'A']]; if(now==nullptr){ now=new Node(s[i]); par->to[idx[s[i]-'A']]=now; } if(t!=-1){ now->vs.emplace_back(t); } } return now; } int etour(Node* now,int id=-1){ now->idx=id; for(int i=0;i<4;i++){ if(now->to[i]!=nullptr){ int to=etour(now->to[i],id+1); id=to; } } now->out=id; return id; } }; int main(){ ios::sync_with_stdio(false); cin.tie(0); idx[0]=0; idx[2]=1; idx['G'-'A']=2; idx['U'-'A']=3; int n,m;cin>>n>>m; vector<string> s(n),p(m),q(m); Trie pre,suf; vector<Node*> en(m),nds(n); vector<P> vv; for(int i=0;i<n;i++){ cin>>s[i]; nds[i]=pre.insert(s[i],-1); } for(int i=0;i<m;i++){ cin>>p[i]>>q[i]; reverse(all(q[i])); en[i]=pre.insert(p[i],-1); } pre.etour(pre.rt); for(int i=0;i<n;i++){ vv.emplace_back(P(nds[i]->idx,i)); } sort(all(vv)); for(int id=0;id<n;id++){ int i=vv[id].second; reverse(all(s[i])); suf.insert(s[i],vv[id].first); } for(int i=0;i<m;i++){ Node* nd=suf.insert(q[i],-1); int ub=en[i]->out,lb=en[i]->idx; int res=upper_bound(all(nd->vs),ub)-lower_bound(all(nd->vs),lb); cout<<res<<'\n'; } }

Compilation message (stderr)

selling_rna.cpp: In member function 'Node* Trie::insert(std::__cxx11::string&, int)':
selling_rna.cpp:29:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<s.length();i++){
               ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...