Submission #568259

#TimeUsernameProblemLanguageResultExecution timeMemory
568259cjoaSelling RNA Strands (JOI16_selling_rna)C++11
10 / 100
894 ms1048576 KiB
#include <iostream> #include <string> #include <vector> #include <algorithm> #include <bitset> #include <cstring> #include <cassert> using namespace std; using BS = bitset<5000>; struct Trie { struct TrieNode { int child[4]; BS prefix; TrieNode() { memset(child, -1, sizeof(child)); } }; vector<TrieNode> nodes; static const int root = 0; // root is at index 0 Trie() { // nodes.reserve(20000); nodes.push_back(TrieNode()); // 1st node is root } void insert(const string& S, int idx) { int cur = root; nodes[cur].prefix.set(idx); for (char c : S) { int k = c - '0'; int nxt = nodes[cur].child[k]; if (nxt < 0) { nxt = nodes.size(); nodes[cur].child[k] = nxt; nodes.push_back(TrieNode()); } cur = nxt; nodes[cur].prefix.set(idx); } } BS find(const string& S) { int cur = root; for (char c : S) { int k = c - '0'; int nxt = nodes[cur].child[k]; if (nxt < 0) return BS(); cur = nxt; } return nodes[cur].prefix; } }; const string valid_chars = "ACGU"; void transform(string& S) { for (int i = 0; i < (int) S.size(); ++i) S[i] = '0' + valid_chars.find( S[i] ); } int main(int argc, char* argv[]) { ios_base::sync_with_stdio(false); cin.tie(NULL); Trie trie_fwd, trie_rev; int N, M; cin >> N >> M; if (N > 5000) return 0; for (int i = 0; i < N; ++i) { string chain; cin >> chain; transform(chain); trie_fwd.insert(chain, i); reverse(chain.begin(), chain.end()); trie_rev.insert(chain, i); } for (int j = 0; j < M; ++j) { string start, end; cin >> start >> end; transform(start); transform(end); reverse(end.begin(), end.end()); BS sf = trie_fwd.find(start); BS ef = trie_rev.find(end); int res = (sf & ef).count(); cout << res << '\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...