제출 #803251

#제출 시각아이디문제언어결과실행 시간메모리
803251huantranVlak (COCI20_vlak)C++17
10 / 70
91 ms219624 KiB
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <vector>

using namespace std;
typedef long long int ll;
const int maxn = 1e6;

ll n, m; // Nina = 0, Emi = 1

struct Vertex{
    ll next[26];
    ll mask = 0;
    ll output = 0;

    Vertex()
    {
        fill(begin(next), end(next), -1);
    }
};

Vertex trie[maxn];
ll cnt = 1;

void add_trie(string s, int bit)
{
    int u = 0;
    for(auto c : s)
    {
        //trie[u].mask |= (1 << bit);
        if(trie[u].next[c - 'a'] == -1)
        {
            trie[u].next[c - 'a'] = cnt++;
        }
        u = trie[u].next[c - 'a'];
        trie[u].mask |= (1 << bit);
    }
    
    trie[u].output++;
}

int dfs_trie(int u, int bit)
{
    for(int i = 0; i <= 25; i++)
    {
        int chi = trie[u].next[i];
        if(trie[u].next[i] == -1)
            continue;
        if((trie[chi].mask&(1LL << (bit^1))) && dfs_trie(chi, bit^1))
            return 0;
    }

    return 1;
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        string s;
        cin >> s;
        add_trie(s, 0); // Nina
    }

    cin >> m;
    for(int i = 1; i <= m; i++)
    {
        string s;
        cin >> s;
        add_trie(s, 1); // Emi
    }

    trie[0].mask |= (1 << 1);

    if(!dfs_trie(0, 0))
        cout << "Nina";
    else
        cout << "Emilija";
}
#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...