Submission #1167633

#TimeUsernameProblemLanguageResultExecution timeMemory
1167633maanayush_17Vlak (COCI20_vlak)C++20
30 / 70
24 ms24920 KiB
#include <bits/stdc++.h> using namespace std; struct TrieNode { bool is_nina = false, is_emilija = false; TrieNode* children[26] = {nullptr}; }; class Trie { public: TrieNode* root; Trie() { root = new TrieNode(); } void insert(const string &word, bool is_nina) { TrieNode* node = root; for (char c : word) { int index = c - 'a'; if (!node->children[index]) { node->children[index] = new TrieNode(); } node = node->children[index]; } if (is_nina) node->is_nina = true; else node->is_emilija = true; } }; unordered_map<TrieNode*, bool> memo; bool isWinning(TrieNode* node) { if (memo.count(node)) return memo[node]; bool canMove = false, hasLosingChild = false; for (TrieNode* child : node->children) { if (child) { canMove = true; if (!isWinning(child)) hasLosingChild = true; } } return memo[node] = (canMove && hasLosingChild); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n; Trie trie; for (int i = 0; i < n; i++) { string word; cin >> word; trie.insert(word, true); } cin >> m; for (int i = 0; i < m; i++) { string word; cin >> word; trie.insert(word, false); } cout << (isWinning(trie.root) ? "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...