#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |