Submission #573043

#TimeUsernameProblemLanguageResultExecution timeMemory
573043a_aguiloType Printer (IOI08_printer)C++14
100 / 100
136 ms36184 KiB
#include<bits/stdc++.h> using namespace std; struct nodo{ char letra; int max_prof; vector<nodo*> listaAdy; bool isLast; nodo(char c){ letra = c; max_prof = 0; isLast = false; } }; struct nodo_smaller{ bool operator()(nodo* const &n1, nodo* const &n2) const { return n1->max_prof < n2->max_prof; } }; //sort(V.begin(),V.end(), nodo_smaller{}); int construir(int pos, string& S, nodo* prev){ if(pos == S.size()) return 0; nodo* act = NULL; for(nodo* vecino: prev->listaAdy){ if(vecino->letra == S[pos]) act = vecino; } if(act == NULL){ act = new nodo(S[pos]); prev->listaAdy.push_back(act); } act->max_prof = max(act->max_prof, 1 +construir(pos+1, S, act)); if (pos == S.size()-1) act->isLast = true; return act->max_prof; } void type_printer (nodo* act, bool last){ if(act->letra != '.') cout << act->letra << '\n'; if (act->isLast){ cout << 'P' << '\n'; } if(act->listaAdy.size() > 0){ sort(act->listaAdy.begin(), act->listaAdy.end(), nodo_smaller{}); for(int i = 0; i < act->listaAdy.size()-1; ++i){ type_printer(act->listaAdy[i], false); } type_printer(act->listaAdy[act->listaAdy.size()-1], last); } if(!last and (act->letra !='.')) cout << '-' << '\n'; } int n_printer (nodo* act, bool last){ int ans = 0; if(act->letra != '.') ans++; if (act->isLast){ ans++; } if(act->listaAdy.size()> 0){ sort(act->listaAdy.begin(), act->listaAdy.end(), nodo_smaller{}); for(int i = 0; i < act->listaAdy.size()-1; ++i){ ans += n_printer(act->listaAdy[i], false); } ans += n_printer(act->listaAdy[act->listaAdy.size()-1], last); } if(!last and (act->letra !='.')) ans++; return ans; } int main(){ int n; string S; cin >> n; nodo inicio = nodo('.'); for(int i = 0; i < n; ++i){ cin >> S; construir(0, S, &inicio); } cout << n_printer(&inicio, true) << '\n'; type_printer(&inicio, true); return 0; }

Compilation message (stderr)

printer.cpp: In function 'int construir(int, std::string&, nodo*)':
printer.cpp:25:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |     if(pos == S.size()) return 0;
      |        ~~~~^~~~~~~~~~~
printer.cpp:35:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     if (pos == S.size()-1) act->isLast = true;
      |         ~~~~^~~~~~~~~~~~~
printer.cpp: In function 'void type_printer(nodo*, bool)':
printer.cpp:46:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<nodo*>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |         for(int i = 0; i < act->listaAdy.size()-1; ++i){
      |                        ~~^~~~~~~~~~~~~~~~~~~~~~~~
printer.cpp: In function 'int n_printer(nodo*, bool)':
printer.cpp:62:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<nodo*>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |         for(int i = 0; i < act->listaAdy.size()-1; ++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...