Submission #1044792

#TimeUsernameProblemLanguageResultExecution timeMemory
1044792aufanSelling RNA Strands (JOI16_selling_rna)C++17
100 / 100
320 ms340604 KiB
#include <bits/stdc++.h> // #define int long long #define fi first #define se second using namespace std; int32_t main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, m; cin >> n >> m; vector<tuple<string, string, int>> v; for (int i = 0; i < n; i++) { string s; cin >> s; v.push_back({s + "]", "?", -1}); } for (int i = 0; i < m; i++) { string p, q; cin >> p >> q; reverse(q.begin(), q.end()); v.push_back({p + "$", q, i}); v.push_back({p + "a", q, i}); } sort(v.begin(), v.end()); int id = 0; vector<int> cnt(2222222); vector<vector<int>> ch(2222222, vector<int>(26)); auto upd = [&](string s, int i) { int nw = 0; reverse(s.begin(), s.end()); for (auto c : s) { if (ch[nw][c - 'A'] == 0) ch[nw][c - 'A'] = ++id; nw = ch[nw][c - 'A']; cnt[nw] += 1; } }; auto query = [&](string s) { int nw = 0; for (auto c : s) { if (ch[nw][c - 'A'] == 0) return 0; nw = ch[nw][c - 'A']; } return cnt[nw]; }; int ptr = 0; vector<int> ans(m); for (int i = 0; i < (int)v.size(); i++) { auto &[p, q, j] = v[i]; if (q == "?") { p.pop_back(); upd(p, i); } else if (p.back() == '$') { ans[j] -= query(q); } else if (p.back() == 'a') { ans[j] += query(q); } } for (int i = 0; i < m; i++) cout << ans[i] << '\n'; return 0; }

Compilation message (stderr)

selling_rna.cpp: In function 'int32_t main()':
selling_rna.cpp:58:13: warning: unused variable 'ptr' [-Wunused-variable]
   58 |         int ptr = 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...