Submission #1137259

#TimeUsernameProblemLanguageResultExecution timeMemory
1137259aykhnVlak (COCI20_vlak)C++20
70 / 70
15 ms10308 KiB
#include <bits/stdc++.h>

using namespace std;

const int MXN = 2e5 + 5;

int nd = 1;
int dp[MXN], has[MXN], dep[MXN];
int adj[26][MXN];

void add(string &s, int f)
{
  int cur = 1;
  for (int i = 0; i < s.length(); i++)
  {
    if (!adj[s[i] - 'a'][cur]) adj[s[i] - 'a'][cur] = ++nd;
    dep[adj[s[i] - 'a'][cur]] = dep[cur] ^ 1;
    cur = adj[s[i] - 'a'][cur];
    has[cur] |= (1 << f);
  }
}

signed main()
{
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++)
  {
    string s;
    cin >> s;
    add(s, 0);
  }
  int m;
  cin >> m;
  for (int i = 1; i <= m; i++)
  {
    string s;
    cin >> s;
    add(s, 1);
  }
  for (int i = nd; i >= 1; i--)
  {
    for (int j = 0; j < 26; j++)
    {
      if (!adj[j][i]) continue;
      if (!dep[i] && !(has[adj[j][i]] & 1)) continue;
      if (dep[i] && !(has[adj[j][i]] & 2)) continue;
      dp[i] |= !dp[adj[j][i]];
    }
  }
  if (dp[1]) cout << "Nina\n";
  else cout << "Emilija\n";
}
#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...