Submission #1095195

#TimeUsernameProblemLanguageResultExecution timeMemory
1095195BF001Vlak (COCI20_vlak)C++17
70 / 70
22 ms14000 KiB
#include<bits/stdc++.h>
using namespace std;
 
struct ii{
    int cnt[2];
    vector<int> nx;
    ii(){
        cnt[0] = cnt[1] = 0;
        nx.resize(26, -1);
    }
}; 

vector<ii> vec;
vector<vector<int>> dp;
string s;

void add(string s, int typ){
    int root = 0;
    for (auto x : s){
        int val = x - 'a';
        if (vec[root].nx[val] == -1){
            vec[root].nx[val] = (int) vec.size();
            vec.push_back(ii());
        }
        root = vec[root].nx[val];
        vec[root].cnt[typ]++;
    }
}

int n, m;

int go(int root, int typ){
    if (dp[typ][root] != -1) return dp[typ][root];
    int rt = 0;
    for (int i = 0; i < 26; i++){
        int nw = vec[root].nx[i];
        if (nw != -1 && vec[nw].cnt[typ]) rt |= !go(nw, !typ);
    }
    dp[typ][root] = rt;
    return rt;
}

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
 
    vec.push_back(ii());

    cin >> n;
    for (int i = 1; i <= n; i++){
        cin >> s;
        add(s, 0);
    }

    cin >> m;
    for (int i = 1; i <= m; i++){
        cin >> s;
        add(s, 1);
    }

    dp.resize(2);
    for (int i = 0; i <= 1; i++){
        dp[i].resize((int) vec.size());
        for (int j = 0; j < (int) vec.size(); j++) dp[i][j] = -1;
    }

    if (go(0, 0)) 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...