Submission #1167631

#TimeUsernameProblemLanguageResultExecution timeMemory
1167631maanayush_17Vlak (COCI20_vlak)C++20
50 / 70
13 ms12872 KiB
#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 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...