Submission #953521

#TimeUsernameProblemLanguageResultExecution timeMemory
953521DarkKnight101Vlak (COCI20_vlak)C++17
70 / 70
218 ms454480 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 mask) { Node* temp = node; int n = s.length(); for(int i=0;i<n;i++){ temp->state|=mask; if (!temp->child[s[i] - 'a']) { temp->child[s[i] - 'a'] = newNode(); } temp = temp->child[s[i]-'a']; } } 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, (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...