Submission #1161763

#TimeUsernameProblemLanguageResultExecution timeMemory
1161763ezzatw122Vlak (COCI20_vlak)C++20
70 / 70
8 ms12180 KiB
#include <bits/stdc++.h>


// you just try again
using namespace std;
#define ll long long

void read() {
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
}


const int N = 1e5 + 5, M = 2;

struct Node {
    int chid[26], lvl, cnt[2];

    Node() {
        for (int i = 0; i < 26; ++i)chid[i] = -1;
        lvl = cnt[0] = cnt[1] = 0;
    }
};

Node Trie[N];
int len;

void add(string &s, int typ) {
    int node = 0, lvl = 0;
    Trie[node].cnt[typ]++;
    for (auto c: s) {
        if (Trie[node].chid[c - 'a'] == -1) {
            Trie[node].chid[c - 'a'] = ++len;
        }
        node = Trie[node].chid[c - 'a'];
        Trie[node].cnt[typ]++;
        Trie[node].lvl = ++lvl;
    }
}

int dp[N], n, m;

int solve(int node) {
    int &ret = dp[node];
    if (~ret)return ret;
    ret = 0;
    int turn = Trie[node].lvl & 1;
    if (!Trie[node].cnt[turn])return ret = 0;
    for (int i = 0; i < 26; ++i) {
        if (~Trie[node].chid[i])ret |= !solve(Trie[node].chid[i]);
    }
    return ret;
}

void code() {
    cin >> n;
    memset(dp, -1, sizeof dp);
    for (int i = 0; i < n; ++i) {
        string s;
        cin >> s;
        add(s, 0);
    }
    cin >> m;
    for (int i = 0; i < m; ++i) {
        string s;
        cin >> s;
        add(s, 1);
    }
    cout << (solve(0) ? "Nina" : "Emilija");
}


int main() {

    read();
    int t = 1;
    // cin >> t;
    while (t--)code();
}


#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...