#include <bits/stdc++.h>
// you just try again
using namespace std;
#define ll long long
void read() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
}
const int N = 2e5 + 5, M = 2;
struct Node {
int chid[26], lvl, cnt[2];
Node() {
for (int i = 0; i < 26; ++i)chid[i] = -1;
lvl = cnt[0] = cnt[1] = 0;
}
};
Node Trie[N];
int len;
void add(string &s, int typ) {
int node = 0, lvl = 0;
Trie[node].cnt[typ]++;
for (auto c: s) {
if (Trie[node].chid[c - 'a'] == -1) {
Trie[node].chid[c - 'a'] = ++len;
}
node = Trie[node].chid[c - 'a'];
Trie[node].cnt[typ]++;
Trie[node].lvl = lvl++;
}
}
int dp[N], n, m;
int solve(int node) {
int &ret = dp[node];
if (~ret)return ret;
ret = 0;
int turn = Trie[node].lvl & 1;
if (!Trie[node].cnt[turn])return ret = 0;
for (int i = 0; i < 26; ++i) {
if (~Trie[node].chid[i])ret |= !solve(Trie[node].chid[i]);
}
return ret;
}
void code() {
cin >> n;
memset(dp, -1, sizeof dp);
for (int i = 0; i < n; ++i) {
string s;
cin >> s;
add(s, 0);
}
cin >> m;
for (int i = 0; i < m; ++i) {
string s;
cin >> s;
add(s, 1);
}
cout << (solve(0) ? "Nina" : "Emilija");
}
int main() {
read();
int t = 1;
// cin >> t;
while (t--)code();
}
# | 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... |