Submission #1204425

#TimeUsernameProblemLanguageResultExecution timeMemory
1204425camposVlak (COCI20_vlak)C++20
10 / 70
106 ms211784 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "algo/debug.h" #else #define debug(...) 42 #endif /* * LE O PROBLEMA ATE O FINAL * LE OS SAMPLES, ENTENDE OS SAMPLES * LE INPUT, LE OUTPUT * LE OS CONSTRAINTS */ const int MAXN = 1e6; int trie[MAXN][26][2]; int memo[MAXN][2]; int id[2]; void insert(string &s, int who) { int node = 0; for(int i = 0; i < (int)s.size(); i++) { int c = s[i] - 'a'; if(trie[node][c][who] == -1) trie[node][c][who] = ++id[who]; node = trie[node][c][who]; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); memset(trie, -1, sizeof trie); memset(memo, -1, sizeof memo); int n, m; string word; cin >> n; for(int i = 0; i < n; i++) { cin >> word; insert(word, 0); } cin >> m; for(int i = 0; i < m; i++) { cin >> word; insert(word, 1); } function<int(int,int,int)> dp = [&](int node1, int node2, int turn) { int &ans = memo[turn ? node1 : node2][turn]; if(ans != -1) return ans; if(!turn) { ans = 0; for(int i = 0; i < 26; i++) { if(trie[node2][i][1] != -1) { if(trie[node1][i][0] == -1) return ans = 1; ans |= dp(trie[node1][i][0], trie[node2][i][1], 1); } } } else { ans = 1; for(int i = 0; i < 26; i++) { if(trie[node1][i][0] != -1) { if(trie[node2][i][1] == -1) return ans = 0; ans &= dp(trie[node1][i][0], trie[node2][i][1], 0); } } } return ans; }; if(dp(0, 0, 0)) cout << "Nina" << "\n"; else cout << "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...