제출 #803251

#제출 시각아이디문제언어결과실행 시간메모리
803251huantranVlak (COCI20_vlak)C++17
10 / 70
91 ms219624 KiB
#include <iostream> #include <algorithm> #include <cstring> #include <string.h> #include <vector> using namespace std; typedef long long int ll; const int maxn = 1e6; ll n, m; // Nina = 0, Emi = 1 struct Vertex{ ll next[26]; ll mask = 0; ll output = 0; Vertex() { fill(begin(next), end(next), -1); } }; Vertex trie[maxn]; ll cnt = 1; void add_trie(string s, int bit) { int u = 0; for(auto c : s) { //trie[u].mask |= (1 << bit); if(trie[u].next[c - 'a'] == -1) { trie[u].next[c - 'a'] = cnt++; } u = trie[u].next[c - 'a']; trie[u].mask |= (1 << bit); } trie[u].output++; } int dfs_trie(int u, int bit) { for(int i = 0; i <= 25; i++) { int chi = trie[u].next[i]; if(trie[u].next[i] == -1) continue; if((trie[chi].mask&(1LL << (bit^1))) && dfs_trie(chi, bit^1)) return 0; } return 1; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for(int i = 1; i <= n; i++) { string s; cin >> s; add_trie(s, 0); // Nina } cin >> m; for(int i = 1; i <= m; i++) { string s; cin >> s; add_trie(s, 1); // Emi } trie[0].mask |= (1 << 1); if(!dfs_trie(0, 0)) cout << "Nina"; else cout << "Emilija"; }
#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...