Submission #1309830

#TimeUsernameProblemLanguageResultExecution timeMemory
1309830SSKMFVlak (COCI20_vlak)C++20
70 / 70
15 ms10060 KiB
#include <bits/stdc++.h>
using namespace std;

struct Nod { bool posibil[2] = { } , gasit[2] = { }; int urmatorul[26] = { }; } arbore[200001];
int numar_noduri = 1;
string sir;

inline void Insert (const int tip)
{
    int nod = 1;
    for (auto caracter : sir)
    {
        if (!arbore[nod].urmatorul[caracter - 'a'])
            { arbore[nod].urmatorul[caracter - 'a'] = ++numar_noduri; }

        nod = arbore[nod].urmatorul[caracter - 'a'];
        arbore[nod].gasit[tip] = true;
    }
}

inline void Parcurgere (const int nod)
{
    if (!nod)
        { return; }

    for (int indice = 0 ; indice < 26 ; indice++) { 
        Parcurgere(arbore[nod].urmatorul[indice]);
        arbore[nod].posibil[0] |= (!arbore[arbore[nod].urmatorul[indice]].posibil[1] && arbore[arbore[nod].urmatorul[indice]].gasit[0]);
        arbore[nod].posibil[1] |= (!arbore[arbore[nod].urmatorul[indice]].posibil[0] && arbore[arbore[nod].urmatorul[indice]].gasit[1]);
    }
}

inline void Solve ()
{
    int cantitate;
    cin >> cantitate;

    while (cantitate--)
        { cin >> sir; Insert(0); }
        
    cin >> cantitate;

    while (cantitate--)
        { cin >> sir; Insert(1); }

    Parcurgere(1);

    cout << (arbore[1].posibil[0] ? "Nina" : "Emilija");
}

int main ()
{
    ios :: sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int numar_teste = 1;
    // cin >> numar_teste;
    while (numar_teste--)
        { Solve(); }

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