Submission #1209371

#TimeUsernameProblemLanguageResultExecution timeMemory
1209371ay136416Vlak (COCI20_vlak)C++20
70 / 70
193 ms454428 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef double lf; typedef long double Lf; typedef pair <int,int> pii; typedef pair <ll, ll> pll; #define TRACE(x) cerr << #x << " " << x << endl #define FOR(i, a, b) for (int i = (a); i < int(b); i++) #define REP(i, n) FOR(i, 0, n) #define all(x) (x).begin(), (x).end() #define _ << " " << #define fi first #define sec second #define mp make_pair #define pb push_back const int ABC = 28; const int MAXN = 1000010; struct Node { int state; Node *child[ABC]; Node() { state = 0; REP(i, ABC) child[i] = NULL; } }; int cnt; Node nodes[MAXN * 2]; Node *newNode() { return &nodes[cnt++]; } struct Trie { Node *root; Trie() { root = newNode(); } void insert(Node *node, string &s, int pos, int mask) { if (pos == (int)s.size()) { return; } node->state |= mask; if (!node->child[s[pos] - 'a']) { node->child[s[pos] - 'a'] = newNode(); } insert(node->child[s[pos] - 'a'], s, pos + 1, mask); } int solve(Node *node, int turn) { if (!(node->state & (1 << turn))) { return 0; } for (int i = 0; i < ABC; i++) { if (node->child[i] && !solve(node->child[i], turn ^ 1)) { return 1; } } return 0; } }; Trie T; const string ans[] = {"Emilija", "Nina"}; int main() { for (int i = 0; i < 2; i++) { int n; string s; cin >> n; for (int j = 0; j < n; j++) { cin >> s; T.insert(T.root, s, 0, (1 << i)); } } cout << ans[T.solve(T.root, 0)] << endl; 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...