Submission #500145

#TimeUsernameProblemLanguageResultExecution timeMemory
500145MounirVlak (COCI20_vlak)C++14
70 / 70
31 ms19572 KiB
#include <bits/stdc++.h> #define all(v) v.begin(), v.end() #define sz(x) (int)x.size() #define pb push_back #define pii pair<int, int> #define chmin(x, v) x = min(x, v) #define chmax(x, v) x = max(x, v) #define x first #define y second #define int long long using namespace std; const int N = 1e6, root = 1; int fils[N][26]; int nNoeuds; bool gagnant[N][2], estFin[N][2]; void ajouter(string line, int iJoueur){ int noeud = root; for (int i = 0; i < (int)line.length(); ++i){ int cara = line[i] - 'a'; if (fils[noeud][cara] == 0) fils[noeud][cara] = nNoeuds++; noeud = fils[noeud][cara]; estFin[noeud][iJoueur] = true; } } signed main(){ nNoeuds = 2; for (int iJoueur = 0; iJoueur < 2; ++iJoueur){ int nMots; cin >> nMots; vector<string> mots(nMots); for (string& mot : mots){ cin >> mot; ajouter(mot, iJoueur); } } gagnant[0][0] = gagnant[0][1] = true; for (int noeud = nNoeuds - 1; noeud > 0; --noeud){ gagnant[noeud][0] = gagnant[noeud][1] = false; for (int c = 0; c < 26; ++c){ gagnant[noeud][0] |= !gagnant[fils[noeud][c]][1]; gagnant[noeud][1] |= !gagnant[fils[noeud][c]][0]; } for (int i = 0; i < 2; ++i) gagnant[noeud][i] |= (estFin[noeud][i] && !estFin[noeud][1 - i]); } if (gagnant[1][0]) cout << "Nina" << endl; else cout << "Emilija" << 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...