#include <bits/stdc++.h>
using namespace std;
struct TrieNode {
bool is_end = false;
map<char, TrieNode*> children;
};
class Trie {
public:
TrieNode* root;
Trie() { root = new TrieNode(); }
void insert(const string &word) {
TrieNode* node = root;
for (char c : word) {
if (!node->children.count(c)) {
node->children[c] = new TrieNode();
}
node = node->children[c];
}
node->is_end = true;
}
};
bool isWinning(TrieNode* node) {
bool canMove = false, hasLosingChild = false;
for (auto &child : node->children) {
canMove = true;
if (!isWinning(child.second)) {
hasLosingChild = true;
}
}
return canMove && hasLosingChild;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n;
Trie ninaTrie, emilijaTrie;
for (int i = 0; i < n; i++) {
string word;
cin >> word;
ninaTrie.insert(word);
}
cin >> m;
for (int i = 0; i < m; i++) {
string word;
cin >> word;
emilijaTrie.insert(word);
}
bool ninaWins = isWinning(ninaTrie.root);
cout << (ninaWins ? "Nina" : "Emilija") << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |