Submission #1070537

#TimeUsernameProblemLanguageResultExecution timeMemory
1070537vjudge1Selling RNA Strands (JOI16_selling_rna)C++17
100 / 100
1394 ms490208 KiB
#include <bits/stdc++.h> using namespace std; long long a[2000005][5], b[2000005][5], l[2000005][5], r[2000005][5], id1=1, id2=1; vector<long long> ans[2000005][5]; string s[100005], pre, suf; string fix(string t) { long long n=t.size(), i; string t1=""; for (i=0; i<n; i++) { if (t[i]=='C') {t1+='a';} else if (t[i]=='U') {t1+='b';} else if (t[i]=='G') {t1+='c';} else {t1+='d';}; }; return t1; } void add(string t, long long k) { long long n=t.size(), i, j=0; for (i=0; i<n; i++) { if (a[j][t[i]-'a']==0) {a[j][t[i]-'a']=id1++; l[j][t[i]-'a']=r[j][t[i]-'a']=k;} else {r[j][t[i]-'a']=k;}; j=a[j][t[i]-'a']; }; } void addsuf(string t, long long k) { long long n=t.size(), i, j=0; for (i=0; i<n; i++) { if (b[j][t[i]-'a']==0) {b[j][t[i]-'a']=id2++;}; ans[j][t[i]-'a'].push_back(k); j=b[j][t[i]-'a']; }; } pair<long long, long long> solvepre(string t) { long long n=t.size(), i, j=0; for (i=0; i<n-1; i++) { if (a[j][t[i]-'a']==0) {return {0LL, 0LL};}; j=a[j][t[i]-'a']; }; return {l[j][t[n-1]-'a'], r[j][t[n-1]-'a']}; } vector<long long> solvesuf(string t) { long long n=t.size(), i, j=0; vector<long long> v; for (i=0; i<n-1; i++) { if (b[j][t[i]-'a']==0) {return v;}; j=b[j][t[i]-'a']; }; return ans[j][t[n-1]-'a']; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); long long n, m, i; pair<long long, long long> p; vector<long long> v; cin >> n >> m; for (i=1; i<=n; i++) { cin >> s[i]; s[i]=fix(s[i]); }; sort(s+1, s+n+1); for (i=1; i<=n; i++) { add(s[i], i); reverse(s[i].begin(), s[i].end()); addsuf(s[i], i); }; while (m--) { cin >> pre >> suf; pre=fix(pre); suf=fix(suf); p=solvepre(pre); reverse(suf.begin(), suf.end()); v=solvesuf(suf); cout << upper_bound(v.begin(), v.end(), p.second)-lower_bound(v.begin(), v.end(), p.first) << "\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...