Submission #525578

#TimeUsernameProblemLanguageResultExecution timeMemory
525578DeepessonType Printer (IOI08_printer)C++17
100 / 100
201 ms122964 KiB
#include <bits/stdc++.h>
typedef std::pair<int,void*> piv;
std::vector<int> responder;
int falta=0;
struct Trie{
    int letra=-1;
    Trie* filhos[30]={};
    int size=1;
    bool printa=false;
    int dfs(){
        int maxdepth=1;
        for(auto&x:filhos){
            if(x){
                maxdepth=std::max(maxdepth,1+x->dfs());
            }
        }
        size=maxdepth;
        return maxdepth;
    }
    void executar(void){
        if(letra!=-1){
            responder.push_back(letra);
        }
        if(printa){
            responder.push_back(777);
            --falta;
        }
        std::vector<piv> vec;
        for(auto&x:filhos){
            if(x)
            vec.push_back({x->size,(void*)x});
        }
        std::sort(vec.begin(),vec.end());
        for(auto&x:vec){
            ((Trie*)x.second)->executar();
        }
        if(falta)
        responder.push_back(1000);
    }
    Trie* get(int x){
        if(filhos[x])return filhos[x];
        Trie* k = new Trie;
        filhos[x]=k;
        k->letra=x;
        return k;
    }
};
Trie inicio;
void escrever(std::string s){
    Trie* aq = &inicio;
    for(int i=0;i!=s.size();++i){
        aq=aq->get(s[i]-'a');
    }
    aq->printa=true;
}
int main()
{
    int N;
    std::cin>>N;
    for(int i=0;i!=N;++i){
        std::string s;
        std::cin >> s;
        escrever(s);
        ++falta;
    }
    inicio.dfs();
    inicio.executar();
    std::cout<<responder.size()<<"\n";
    for(auto&x:responder){
        if(x==777){
            std::cout<<"P\n";
        }else if(x==1000){
            std::cout<<"-\n";
        }else std::cout<<((char)(x+'a'))<<"\n";
    }
}

Compilation message (stderr)

printer.cpp: In function 'void escrever(std::string)':
printer.cpp:51:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |     for(int i=0;i!=s.size();++i){
      |                 ~^~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...