제출 #601807

#제출 시각아이디문제언어결과실행 시간메모리
601807elkernosSelling RNA Strands (JOI16_selling_rna)C++17
100 / 100
311 ms192368 KiB
#include <bits/stdc++.h> using namespace std; struct T { int nxt[4] = {-1, -1, -1, -1}; vector<int> id; }; int mapuj(char x) { if(x == 'A') { return 0; } if(x == 'G') { return 1; } if(x == 'C') { return 2; } if(x == 'U') { return 3; } } struct tree { vector<T> trie; tree() { trie.emplace_back(); } void insert(string &s, int i) { int v = 0; for(char x : s) { int id = mapuj(x); if(trie[v].nxt[id] == -1) { trie[v].nxt[id] = (int)trie.size(); trie.emplace_back(); } trie[v].id.emplace_back(i); v = trie[v].nxt[id]; } trie[v].id.emplace_back(i); } int search(string &s) { int v = 0; for(char x : s) { int id = mapuj(x); if(trie[v].nxt[id] == -1) { return -1; } v = trie[v].nxt[id]; } return v; } }; int32_t main() { cin.tie(0)->sync_with_stdio(0); int n, q; cin >> n >> q; vector<string> s(n + 1); for(int i = 1; i <= n; i++) { cin >> s[i]; } sort(1 + s.begin(), s.end()); tree trie, trierev; for(int i = 1; i <= n; ++i) { trie.insert(s[i], i); reverse(s[i].begin(), s[i].end()); trierev.insert(s[i], i); } for(int i = 1; i <= q; i++) { string pre, suf; cin >> pre >> suf; int one = trie.search(pre); reverse(suf.begin(), suf.end()); int two = trierev.search(suf); if(one == -1 || two == -1) { cout << 0 << '\n'; continue; } int lo = trie.trie[one].id.front(), hi = trie.trie[one].id.back(); auto it1 = lower_bound(trierev.trie[two].id.begin(), trierev.trie[two].id.end(), lo); auto it2 = upper_bound(trierev.trie[two].id.begin(), trierev.trie[two].id.end(), hi); if(it1 == trierev.trie[two].id.end() || hi < *it1) { cout << 0 << '\n'; continue; } cout << distance(it1, it2) << '\n'; } }

컴파일 시 표준 에러 (stderr) 메시지

selling_rna.cpp: In function 'int mapuj(char)':
selling_rna.cpp:24:1: warning: control reaches end of non-void function [-Wreturn-type]
   24 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...