Submission #1199113

#TimeUsernameProblemLanguageResultExecution timeMemory
1199113qrnSelling RNA Strands (JOI16_selling_rna)C++20
10 / 100
1609 ms527912 KiB
#include <bits/stdc++.h> // #include <ext/pb_ds/assoc_container.hpp> using namespace std; // using namespace __gnu_pbds; #define pb push_back #define ins insert #define fi first #define se second #define endl "\n" #define ALL(x) x.begin(), x.end() #define intt long long const intt mod = 1e9 + 7; const intt base = 41; const intt inf = 1e18; const intt mxN = 5005; const intt L = 21; struct trie { map<intt, trie*> kids; set<intt> data; intt cnt; trie () { cnt = 0; data.clear(); kids.clear(); } }; void add(trie *& root, string s, intt idx) { trie *node = root; intt N = (intt)s.size(); for(intt i = 0; i < N; i++) { if(node->kids.find(s[i] - 'A' + 1) == node->kids.end()) { node->kids[s[i] - 'A' + 1] = new trie(); } node = node->kids[s[i] - 'A' + 1]; node->cnt++; node->data.insert(idx); } } set<intt> st; intt ans; void get_pre(trie *& root, string s) { trie *node = root; intt N = (intt)s.size(); // cout << "WTF" << endl; for(intt i = 0; i < N; i++) { if(node->kids.find(s[i] - 'A' + 1) == node->kids.end()) { return; } node = node->kids[s[i] - 'A' + 1]; } st = node->data; } void get_suf(trie *& root, string s) { trie *node = root; intt N = (intt)s.size(); for(intt i = 0; i < N; i++) { if(node->kids.find(s[i] - 'A' + 1) == node->kids.end()) { return; } node = node->kids[s[i] - 'A' + 1]; } set<intt> temp = node->data; for(intt i : temp) { if(st.find(i) != st.end()) { ans++; } } } void solve() { intt N, M; cin >> N >> M; trie *root1 = new trie(); trie *root2 = new trie(); for(intt i = 0; i < N; i++) { string s; cin >> s; add(root1, s, i); reverse(ALL(s)); // cout << i << endl; add(root2, s, i); } for(intt i = 0; i < M; i++) { string pre, suf; cin >> pre >> suf; get_pre(root1, pre); reverse(ALL(suf)); // if(i == 1) { // cout << "ST: "; // for(intt i : st) { // cout << i << " "; // } // cout << endl; // } get_suf(root2, suf); cout << ans << endl; st.clear(); ans = 0; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); intt tst = 1; // cin >> tst; while (tst--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...