Submission #1195869

#TimeUsernameProblemLanguageResultExecution timeMemory
1195869anonymous321Vlak (COCI20_vlak)C++20
70 / 70
15 ms13224 KiB
// https://oj.uz/problem/view/COCI20_vlak
#include <bits/stdc++.h>
using namespace std;

struct node {
    vector<int> child = vector<int> (26, -1);
    bool nina = false;
    bool emilija = false;
};

vector<node> t {{}};

void insert (string &s, bool nina, int id = 0, int i = 0) {
    if (nina) {
        t[i].nina = true;
    } else {
        t[i].emilija = true;
    }
    if (s.size() == id) return;
    int c = s[id] - 'a';
    if (t[i].child[c] == -1) {
        t.push_back({});
        t[i].child[c] = t.size() - 1;
    }
    insert(s, nina, id+1, t[i].child[c]);
}

bool dfs (int i, bool nina) {
    bool win = false;
    for (int c = 0; c < 26; c++) {
        if (t[i].child[c] == -1) continue;
        if (nina && !t[t[i].child[c]].nina) continue;
        if (!nina && !t[t[i].child[c]].emilija) continue;
        if (!dfs(t[i].child[c], !nina)) {
            win = true;
        }
    }
    return win;
}

int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        insert(s, true);
    }
    int m;
    cin >> m;
    for (int i = 0; i < m; i++) {
        string s;
        cin >> s;
        insert(s, false);
    }
    
    if (dfs(0, true)) {
        cout << "Nina\n";
    } else {
        cout << "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...