제출 #1194733

#제출 시각아이디문제언어결과실행 시간메모리
1194733KindaGoodGamesVlak (COCI20_vlak)C++20
0 / 70
15 ms12196 KiB
#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> #define tiii tuple<int,int,int> using namespace std; struct TrieNode{ vector<int> child; bool marked; bool p1; bool p2; TrieNode(){ child.resize(26, -1); marked = false; p1 = false; p2 = false; } }; vector<TrieNode> trie; vector<vector<bool>> dp(2, {false}); void insert(string& s, int i, int ind, int k){ if(i+1 == s.size()){ trie[ind].marked = true; return; } if( trie[ind].child[s[i]-'a'] == -1){ trie[ind].child[s[i]-'a'] = trie.size(); trie.push_back(TrieNode()); } int c = trie[ind].child[s[i]-'a']; if(k == 0){ trie[c].p1 = true; }else{ trie[c].p2 = true; } insert(s,i+1,c,k); } void rec(int ind, int k){ if(trie[ind].p1 && !trie[ind].p2){ dp[0][ind] = 1; return; } if(trie[ind].p1 == false && trie[ind].p2 == true){ dp[1][ind] = 1; return; } bool ch = false; for(int i = 0; i < 26; i++){ int c = trie[ind].child[i]; if(c != -1){ ch = true; rec(c, 1-k); if(!dp[1-k][c]){ dp[k][ind] = true; } } } if(!ch){ dp[1-k][ind] = 1; } } int main(){ trie.push_back(TrieNode()); int n1; cin >> n1; for(int i = 0; i < n1; i++){ string s; cin >> s; insert(s, 0, 0, 0); } int n2; cin >> n2; if(n1 == 0){ cout <<"Emilija" << endl; return 0; } if(n2 == 0){ cout <<"Nina" << endl; return 0; } for(int i = 0; i < n2; i++){ string s; cin >> s; insert(s, 0, 0, 1); } dp.resize(2, vector<bool>(trie.size())); rec(0,0); if(!dp[0][0]){ cout <<"Nina" << endl; }else{ cout <<"Emilija" << endl; } }
#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...