Submission #1153822

#TimeUsernameProblemLanguageResultExecution timeMemory
1153822yhkhooVlak (COCI20_vlak)C++20
10 / 70
9 ms13128 KiB
#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> pii;
#define fi first
#define se second

const int MAXN = 200000;
int n, m;
string a[MAXN];
string b[MAXN];

unordered_map<string, bool> memo;

bool dp(string x){
    if(memo.count(x)){
        return memo[x];
    }
    bool eturn = x.length() % 2;
    bool ret;
    if(eturn){
        ret = 0;
        for(char i='a'; i<='z'; i++){
            string tmp = x+i;
            auto nx = lower_bound(b, b+n, tmp);
            if(nx != b+n && nx->length() > x.length() && (*nx)[x.length()+1] == i && dp(tmp)){
                ret = 1;
                break;
            }
        }
    }
    else{
        ret = 1;
        for(char i='a'; i<='z'; i++){
            string tmp = x+i;
            auto nx = lower_bound(a, a+n, tmp);
            if(nx != a+n && nx->length() > x.length() && (*nx)[x.length()+1] == i && (!dp(tmp))){
                ret = 0;
                break;
            }
        }
    }
    memo[x] = ret;
    return ret;
}

int main(){
    cin.tie(0); ios_base::sync_with_stdio(0);
    cin >> n;
    for(int i=0; i<n; i++){
        cin >> a[i];
    }
    cin >> m;
    for(int i=0; i<m; i++){
        cin >> b[i];
    }
    sort(a, a+n);
    sort(b, b+n);
    if(dp("") == 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...