Submission #585957

#TimeUsernameProblemLanguageResultExecution timeMemory
585957AceSelling RNA Strands (JOI16_selling_rna)C++14
35 / 100
1589 ms143700 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<int> isi[N+5]; 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[pre[i].size()].insert(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 : dep){ if(cand > li[i].size()) break; for(auto cand2: isi[cand]){ if(cand2 > li[i].size()) break; pii tmp = make_pair(memoDep[i][cand], memoBel[i][cand2]); 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:12: 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 > li[i].size()) break;
      |       ~~~~~^~~~~~~~~~~~~~
selling_rna.cpp:80:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   80 |     if(cand2 > li[i].size()) break;
      |        ~~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...