Submission #649081

#TimeUsernameProblemLanguageResultExecution timeMemory
649081Elias_ObeidVlak (COCI20_vlak)C++17
70 / 70
24 ms21644 KiB
#include <bits/stdc++.h> using namespace std; const int A = 26; const int LEN = 200'000; struct TrieNode { array<bool, 2> players; array<int, A> next_nodes; TrieNode() { players.fill(false); next_nodes.fill(-1); } }; int N, M; int current_trie_node = 0; array<TrieNode, LEN + 1> trie; int fetchNode() { trie[current_trie_node] = TrieNode(); return current_trie_node++; } const int ROOT = fetchNode(); void addString(const string &S, int player) { int current_node = ROOT; for (int i = 0; i < (int)S.size(); ++i) { int letter = (S[i] - 'a'); if (trie[current_node].next_nodes[letter] == -1) { trie[current_node].next_nodes[letter] = fetchNode(); } current_node = trie[current_node].next_nodes[letter]; trie[current_node].players[player] = true; } } bool getWinner(int node, int player) { bool won = false; for (int letter = 0; letter < A; ++letter) { if (trie[node].next_nodes[letter] != -1 && trie[trie[node].next_nodes[letter]].players[player]) { won |= !getWinner(trie[node].next_nodes[letter], player ^ 1); } } return won; } int main() { cin >> N; for (int i = 0; i < N; ++i) { string S; cin >> S; addString(S, 0); } cin >> M; for (int i = 0; i < M; ++i) { string S; cin >> S; addString(S, 1); } cout << (getWinner(ROOT, 0) ? "Nina" : "Emilija") << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...