Submission #839491

#TimeUsernameProblemLanguageResultExecution timeMemory
839491LilintaVlak (COCI20_vlak)C++14
70 / 70
14 ms20180 KiB
// COCI 2020/2021 Contest#3 Problem 2 - Vlak
#include <bits/stdc++.h>
using namespace std;

struct Trie {
    struct Node {
        Node* child[26];
        bool allowNina;
        bool allowEmilija;

        Node() {
            for (int i = 0; i < 26; ++i) {
                child[i] = nullptr;
            }
            allowNina = false;
            allowEmilija = false;
        }
    };

    Node* root;

    Trie() {
        root = new Node();
    }

    void addString(string &s, bool player) {
        Node* p = root;
        for (char f : s) {
            int c = f - 'a';
            if (p -> child[c] == nullptr) {
                p -> child[c] = new Node();
            }
            p = p -> child[c];
            if (player) {
                p -> allowNina = true;
            } else {
                p -> allowEmilija = true;
            }
        }
    }
};

int n, m;
Trie T;

bool isWin(Trie::Node* p, bool player) {
    if (player) { // Nina
        for (int c = 0; c <= 25; ++c) {
            if (p -> child[c] != nullptr && p -> child[c] -> allowNina == true && !isWin(p -> child[c], false)) {
                return true;
            }
        }
        return false;
    } else {
        for (int c = 0; c <= 25; ++c) {
            if (p -> child[c] != nullptr && p -> child[c] -> allowEmilija == true && !isWin(p -> child[c], true)) {
                return true;
            }
        }
        return false;
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    for (int i = 0; i < n; ++i) {
        string s;
        cin >> s;
        T.addString(s, true);
    }
    cin >> m;
    for (int i = 0; i < m; ++i) {
        string s;
        cin >> s;
        T.addString(s, false);
    }
    if (isWin(T.root, true)) {
        cout << "Nina";
    } else {
        cout << "Emilija";
    }
    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...