Submission #542025

#TimeUsernameProblemLanguageResultExecution timeMemory
542025AlperenTVlak (COCI20_vlak)C++17
70 / 70
30 ms20372 KiB
#include <bits/stdc++.h>

using namespace std;

int n, m;

string str;

struct Trie{
    struct TrieNode{
        char color, winner;

        TrieNode* edge[26];

        TrieNode(){
            color = winner = '.';
            fill(edge, edge + 26, nullptr);
        }
    };

    TrieNode *root;

    void add(TrieNode *&v, string &str, char c, int indx = 0){
        if(!v) v = new TrieNode();

        if(indx == str.size()){
            if(v->color == '.') v->color = c;
            else if(v->color != c) v->color = 'C';
        }
        else{
            add(v->edge[str[indx] - 'a'], str, c, indx + 1);
        }
    }

    void dfs(TrieNode *&v, int p){
        if(!v) return;

        bool issame = false;

        for(int e = 0; e < 26; e++){
            if(v->edge[e]){
                dfs(v->edge[e], p == 'A' ? 'B' : 'A');

                if((v->edge[e]->color == p || v->edge[e]->color == 'C') && v->edge[e]->winner == p) issame = true;

                if(v->edge[e]->color == 'A'){
                    if(v->color == 'B') v->color = 'C';
                    else if(v->color == '.') v->color = 'A';
                }
                else if(v->edge[e]->color == 'B'){
                    if(v->color == 'A') v->color = 'C';
                    else if(v->color == '.') v->color = 'B';
                }
                else if(v->edge[e]->color == 'C'){
                    v->color = 'C';
                }
            }
        }

        v->winner = issame ? p : (p == 'A' ? 'B' : 'A');
    }
};

Trie trie;

int main(){
    ios_base::sync_with_stdio(false);cin.tie(NULL);

    cin >> n;

    while(n--){
        cin >> str;

        trie.add(trie.root, str, 'A');
    }

    cin >> m;

    while(m--){
        cin >> str;

        trie.add(trie.root, str, 'B');
    }

    trie.dfs(trie.root, 'A');

    if(trie.root->winner == 'A') cout << "Nina";
    else cout << "Emilija";
}

Compilation message (stderr)

Main.cpp: In member function 'void Trie::add(Trie::TrieNode*&, std::string&, char, int)':
Main.cpp:26:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |         if(indx == str.size()){
      |            ~~~~~^~~~~~~~~~~~~
#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...