제출 #849665

#제출 시각아이디문제언어결과실행 시간메모리
849665alexddSelling RNA Strands (JOI16_selling_rna)C++17
100 / 100
306 ms452176 KiB
#include<bits/stdc++.h> using namespace std; const long long MOD = 1e9+7; const int cst = 31; int n,m; vector<int> trie[2000005]; int mch[2000005][26]; vector<int> trie2[2000005]; int mch2[2000005][26]; int rez[100005]; int cnt,cnt2; int poze[2000005],timer=0; int siz[2000005]; int op[100005]; int mp[2000005]; vector<pair<pair<int,int>,int>> qrys[100005]; vector<int> pozs[100005]; void dfs(int nod) { poze[nod]=++timer; siz[nod]=1; for(auto adj:trie[nod]) { dfs(adj); siz[nod]+=siz[adj]; } } int v[2000005]; void solve(int suff) { int cntv=0; sort(pozs[suff].begin(),pozs[suff].end()); for(auto x:qrys[suff]) rez[x.second] = upper_bound(pozs[suff].begin(),pozs[suff].end(),x.first.second) - lower_bound(pozs[suff].begin(),pozs[suff].end(),x.first.first); } int ult[100005]; string cit[100005]; signed main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>m; string s,p,q; for(int i=1;i<=n;i++) { cin>>s; cit[i]=s; int nod=0; for(int j=0;j<s.size();j++) { if(mch[nod][s[j]-'A']==0) { cnt++; mch[nod][s[j]-'A']=cnt; trie[nod].push_back(cnt); } nod=mch[nod][s[j]-'A']; } ult[i]=nod; } dfs(0); for(int i=1;i<=m;i++) { cin>>p>>q; int nod=0; bool bl=0; for(int j=0;j<p.size();j++) { if(mch[nod][p[j]-'A']==0) { bl=1; break; } nod=mch[nod][p[j]-'A']; } if(!bl) { int nod2=0; for(int j=q.size()-1;j>=0;j--) { if(mch2[nod2][q[j]-'A']==0) { cnt2++; mch2[nod2][q[j]-'A']=cnt2; trie2[nod2].push_back(cnt2); } nod2=mch2[nod2][q[j]-'A']; } ///qrys[nod].push_back({curaux,i}); if(mp[nod2]==0) mp[nod2]=i; op[i]=nod2; qrys[mp[nod2]].push_back({{poze[nod],poze[nod]+siz[nod]-1},i}); } } for(int i=1;i<=n;i++) { s=cit[i]; int nod2=0; for(int j=s.size()-1;j>=0;j--) { if(mch2[nod2][s[j]-'A']==0) { cnt2++; mch2[nod2][s[j]-'A']=cnt2; trie2[nod2].push_back(cnt2); } nod2=mch2[nod2][s[j]-'A']; if(mp[nod2]!=0) pozs[mp[nod2]].push_back(poze[ult[i]]); } } for(int i=m;i>0;i--) { if(mp[op[i]]==i) { solve(i); } } for(int i=1;i<=m;i++) cout<<rez[i]<<"\n"; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

selling_rna.cpp: In function 'void solve(int)':
selling_rna.cpp:31:9: warning: unused variable 'cntv' [-Wunused-variable]
   31 |     int cntv=0;
      |         ^~~~
selling_rna.cpp: In function 'int main()':
selling_rna.cpp:48:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |         for(int j=0;j<s.size();j++)
      |                     ~^~~~~~~~~
selling_rna.cpp:66:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |         for(int j=0;j<p.size();j++)
      |                     ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...