Submission #585953

#TimeUsernameProblemLanguageResultExecution timeMemory
585953AceSelling RNA Strands (JOI16_selling_rna)C++14
35 / 100
1561 ms140288 KiB
#include<bits/stdc++.h> using namespace std; typedef pair<int,int> pii; typedef pair<pii,pii> piipii; const int N = 1e5; const int MULT = 23; inline int getNum(char x){ return x-'A'+1; } inline int getHash(string &s, int len){ int ret = 0; for(int i=0;i<len;i++){ ret *= MULT; ret += getNum(s[i]); } return ret; } map<int,int> memoDep[N+5]; map<int,int> memoBel[N+5]; string li[N+5]; int n,m; string pre[N+5], suf[N+5]; set<pii> isi; set<int> dep, bel; map<pii, int> cnt; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for(int i=1;i<=n;i++){ cin >> li[i]; } for(int i=1;i<=m;i++){ cin >> pre[i] >> suf[i]; reverse(suf[i].begin(), suf[i].end()); isi.insert(make_pair(pre[i].size(), suf[i].size())); dep.insert(pre[i].size()); bel.insert(suf[i].size()); cnt[make_pair(getHash(pre[i], pre[i].size()), getHash(suf[i], suf[i].size()))] = 0; } for(int i=1;i<=n;i++){ int tmp = 0; int prev = 0; for(auto x: dep){ if(x > li[i].size()) break; for(;prev<x;prev++){ tmp *= MULT; tmp += getNum(li[i][prev]); } memoDep[i][x] = tmp; } } for(int i=1;i<=n;i++){ int tmp = 0; int prev = 0; string tmps = li[i]; reverse(tmps.begin(), tmps.end()); for(auto x: bel){ if(x > li[i].size()) break; for(;prev<x;prev++){ tmp *= MULT; tmp += getNum(tmps[prev]); } memoBel[i][x] = tmp; } } for(int i=1;i<=n;i++){ for(auto cand: isi){ if(cand.first > li[i].size() || cand.second > li[i].size()) continue; pii tmp = make_pair(memoDep[i][cand.first], memoBel[i][cand.second]); if(cnt.find(tmp) != cnt.end()) cnt[tmp]++; } } for(int i=1;i<=m;i++){ cout << cnt[make_pair(getHash(pre[i], pre[i].size()), getHash(suf[i], suf[i].size()))] << endl; } return 0; }

Compilation message (stderr)

selling_rna.cpp: In function 'int main()':
selling_rna.cpp:52:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |    if(x > li[i].size()) break;
      |       ~~^~~~~~~~~~~~~~
selling_rna.cpp:67:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |    if(x > li[i].size()) break;
      |       ~~^~~~~~~~~~~~~~
selling_rna.cpp:78:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |    if(cand.first > li[i].size() || cand.second > li[i].size()) continue;
      |       ~~~~~~~~~~~^~~~~~~~~~~~~~
selling_rna.cpp:78:48: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |    if(cand.first > li[i].size() || cand.second > li[i].size()) continue;
      |                                    ~~~~~~~~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...