제출 #1279932

#제출 시각아이디문제언어결과실행 시간메모리
1279932han^Selling RNA Strands (JOI16_selling_rna)C++17
100 / 100
182 ms218688 KiB
#include<bits/stdc++.h> #define For(i,a,b) for(int i=a;i<=b;i++) #define Ford(i,a,b) for(int i=a;i>=b;i--) #define ll long long #define ii pair<int,int> #define fi first #define se second #define N 1000005 using namespace std; int n, q; string s[N]; int stranform(char x) { if (x == 'A') return 0; if (x == 'C') return 1; if (x == 'G') return 2; return 3; } struct Trie { struct Node { Node* c[4]; int l, r; Node() { For (i, 0, 3) c[i] = 0; l = 2e9; r = 0; } }; Node* root; Trie() { root = new Node(); } void add (string s, int id) { Node* p = root; For (i, 0, (int) s.size() - 1) { int x = stranform (s[i]); if (!p->c[x]) p->c[x] = new Node(); p = p->c[x]; if (id < p->l) p->l = id; if (id > p->r) p->r = id; } } ii get (string s) { Node* p = root; For (i, 0, (int) s.size() - 1) { int x = stranform(s[i]); if (!p->c[x]) return {2e9, 2e9}; p = p->c[x]; } return {p->l, p->r}; } }; struct RTrie { struct Node { Node* c[4]; vector<int> id; Node() { For (i, 0, 3) c[i] = 0; } }; Node* root; RTrie() { root = new Node(); } void add (string s, int id) { reverse (s.begin(), s.end() ); Node* p = root; For (i, 0, (int) s.size() - 1) { int x = stranform (s[i]); if (!p->c[x]) p->c[x] = new Node(); p = p->c[x]; p->id.push_back (id); } } int get (string s, ii k) { int l = k.fi, r = k.se; if (l == r && l == 2e9) return 0; Node* p = root; For (i, 0, (int) s.size() - 1) { int x = stranform (s[i]); if (!p->c[x]) return 0; p = p->c[x]; } return upper_bound (p->id.begin(), p->id.end(), r) - lower_bound (p->id.begin(), p->id.end(), l); } }; int main() { ios_base::sync_with_stdio (0); cin.tie (NULL); cout.tie (NULL); cin >> n >> q; For (i, 1, n) cin >> s[i]; sort (s + 1, s + 1 + n); Trie t1; RTrie t2; For (i, 1, n) { t1.add (s[i], i); t2.add (s[i], i); } while (q--) { string p, q; cin >> p >> q; reverse (q.begin(), q.end() ); cout << t2.get (q, t1.get (p) ) << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...