Submission #513961

#TimeUsernameProblemLanguageResultExecution timeMemory
513961KoDVlak (COCI20_vlak)C++17
70 / 70
23 ms14520 KiB
#include <bits/stdc++.h> using std::vector; using std::array; using std::pair; using std::tuple; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); struct Node { array<int, 26> child; array<bool, 2> play; Node() { child.fill(-1); play.fill(false); } }; vector<Node> node; node.emplace_back(); node[0].play.fill(true); const auto child = [&](const int u, const char c) { if (node[u].child[c - 'a'] == -1) { node[u].child[c - 'a'] = node.size(); node.emplace_back(); } return node[u].child[c - 'a']; }; for (int k = 0; k < 2; ++k) { int n; std::cin >> n; while (n--) { std::string s; std::cin >> s; int u = 0; for (const char c : s) { u = child(u, c); node[u].play[k] = true; } } } const int n = node.size(); vector<array<bool, 2>> wins(n); for (int u = n - 1; u >= 0; --u) { for (int k = 0; k < 2; ++k) { if (!node[u].play[k]) { wins[u][k] = false; continue; } for (const int v : node[u].child) { if (v != -1 and !wins[v][k ^ 1]) { wins[u][k] = true; break; } } } } std::cout << (wins[0][0] ? "Nina" : "Emilija") << '\n'; 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...