Submission #1237352

#TimeUsernameProblemLanguageResultExecution timeMemory
1237352PlayVoltzSelling RNA Strands (JOI16_selling_rna)C++20
100 / 100
170 ms184328 KiB
#include <cstdio> #include <stdio.h> #include <stdbool.h> #include <iostream> #include <map> #include <vector> #include <climits> #include <stack> #include <string> #include <queue> #include <algorithm> #include <set> #include <unordered_set> #include <unordered_map> #include <cmath> #include <cctype> #include <bitset> #include <iomanip> #include <cstring> #include <numeric> #include <cassert> #include <random> #include <chrono> #include <fstream> using namespace std; #define int long long #define pii pair<int, int> #define mp make_pair #define pb push_back #define fi first #define se second int trie[2][2000005][4], in[2000005], out[2000005], counter[2]; vector<int> got[2000005]; int conv(char c){ if (c=='A')return 0; if (c=='U')return 1; if (c=='G')return 2; return 3; } void insert(int id, string s){ int node=0; for (int i=0; i<s.size(); ++i){ int c=conv(s[i]); if (!trie[0][node][c])trie[0][node][c]=++counter[0]; node=trie[0][node][c]; if (!in[node])in[node]=id; out[node]=id; } node=0; for (int i=s.size()-1; i>=0; --i){ int c=conv(s[i]); if (!trie[1][node][c])trie[1][node][c]=++counter[1]; node=trie[1][node][c]; got[node].pb(id); } } int dfs(string s, int t){ int node=0; if (t)reverse(s.begin(), s.end()); for (int i=0; i<s.size(); ++i){ int c=conv(s[i]); if (!trie[t][node][c])return 0; node=trie[t][node][c]; } return node; } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, q; cin>>n>>q; string a, b; vector<string> vect(n); for (int i=0; i<n; ++i)cin>>vect[i]; sort(vect.begin(), vect.end()); for (int i=0; i<n; ++i)insert(i+1, vect[i]); while (q--){ cin>>a>>b; int aa=dfs(a, 0), bb=dfs(b, 1); if (!aa||!bb)cout<<"0\n"; else cout<<upper_bound(got[bb].begin(), got[bb].end(), out[aa])-lower_bound(got[bb].begin(), got[bb].end(), in[aa])<<"\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...