Submission #1282810

#TimeUsernameProblemLanguageResultExecution timeMemory
1282810Jawad_Akbar_JJSelling RNA Strands (JOI16_selling_rna)C++20
100 / 100
221 ms265128 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; string en[1<<17], st, s; int Ans[1<<17], mod = 998244353; vector<int> hsh[1<<17]; struct node{ vector<int> vc; vector<node*> ch; char cur; void insert(string &s, int ind, int vl){ vc.push_back(vl); if (ind == s.size()) return; for (int i=0;i<ch.size();i++){ if (ch[i]->cur == s[ind]){ ch[i]->insert(s, ind+1, vl); return; } } node* Nw = new node(); Nw->cur = s[ind]; ch.push_back(Nw); Nw->insert(s, ind+1, vl); } int get(string &s, int ind, int vl){ if (ind == s.size()){ int l = -1, r = vc.size(); while (l + 1 < r){ int mid = (l + r) / 2; if (vc[mid] <= vl) r = mid; else l = mid; } return vc.size() - r; } for (int i=0;i<ch.size();i++){ if (ch[i]->cur == s[ind]) return ch[i]->get(s, ind+1, vl); } return 0; } }; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, m; cin>>n>>m; vector<pair<string, int>> vec; for (int i=1;i<=n;i++){ cin>>s; vec.push_back({s, i}); } for (int i=1;i<=m;i++){ cin>>st>>en[i]; reverse(begin(en[i]), end(en[i])); vec.push_back({st, -i}); } sort(begin(vec), end(vec)); node *rt = new node(); for (int i=vec.size()-1, id = n;i>=0;i--){ if (vec[i].second < 0){ int h = 0; s = vec[i].first; for (int j=0;j<s.size();j++) h = (1LL * h * 256 + s[j]) % mod; int l = id, r = n + 1; while (l + 1 < r){ int mid = (l + r) / 2; if (hsh[mid].size() >= s.size() and hsh[mid][s.size() - 1] == h) l = mid; else r = mid; } Ans[-vec[i].second] = rt->get(en[-vec[i].second], 0, l); } else{ s = vec[i].first; for (int j=0, h = 0;j<s.size();j++) h = (1LL * h * 256 + s[j]) % mod, hsh[id].push_back(h); reverse(begin(s), end(s)); rt->insert(s, 0, id); id--; } } for (int i=1;i<=m;i++) cout<<Ans[i]<<' '; cout<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...