Submission #876996

#TimeUsernameProblemLanguageResultExecution timeMemory
876996StefanL2005Type Printer (IOI08_printer)C++14
90 / 100
1089 ms5068 KiB
#include <bits/stdc++.h> using namespace std; struct LetterPoz{ int poz, length; }; bool rule(LetterPoz A, LetterPoz B) { if (A.length == B.length) return A.poz < B.poz; return A.length < B.length; } int Similarities(string A, string B) { int lA = A.length(), lB = B.length(), nr = 0; for (int i = 0; i < min(lA, lB); i++) if (A[i] == B[i]) nr++; else break; return nr; } void MoveBiggestLast (vector<string> &EndStrings, int MaxSize, vector<char> &Commands) { int GetPoz = 0; for (int i = 0; i < EndStrings.size(); i++) if (EndStrings[i].size() > EndStrings[GetPoz].size()) GetPoz = i; vector<string> Str = EndStrings; int level = 2; string Last = ""; int nr = Str.size(); do { vector<string> Finishes; for (int i = 0; i < Str.size(); i++) { if (Str[i] == "") continue; if (EndStrings[GetPoz].substr(0, level) == Str[i].substr(0, level)) { if (Str[i].size() == level) { Finishes.push_back(Str[i]); Str[i] = ""; nr--; } continue; } int sim = Similarities(Str[i], Last); for (int j = 0; j < Last.length() - sim; j++) Commands.push_back('-'); for (int j = sim; j < Str[i].length(); j++) Commands.push_back(Str[i][j]); Commands.push_back('P'); Last = Str[i]; Str[i] = ""; nr--; } for (int i = 0; i < Finishes.size(); i++) { int sim = Similarities(Finishes[i], Last); for (int j = 0; j < Last.length() - sim; j++) Commands.push_back('-'); for (int j = sim; j < Finishes[i].length(); j++) Commands.push_back(Finishes[i][j]); Commands.push_back('P'); Last = Finishes[i]; } level++; }while (nr != 0); } int main() { ios_base :: sync_with_stdio(false); int N; cin>> N; vector<string> To_Print(N); vector<char> Commands; for (int i = 0; i < N; i++) cin>> To_Print[i]; sort(To_Print.begin(), To_Print.end()); char FinalLetter; int MaxSize = 0; for (int i = 0; i < N; i++) { if (To_Print[i].size() > MaxSize) { MaxSize = To_Print[i].size(); FinalLetter = To_Print[i][0]; } } string Last = ""; for (int i = 0; i < N; i++) { if (To_Print[i][0] == FinalLetter) continue; int sim = Similarities(To_Print[i], Last); for (int j = 0; j < Last.length()- sim; j++) Commands.push_back('-'); for (int j = sim; j < To_Print[i].length(); j++) Commands.push_back(To_Print[i][j]); Commands.push_back('P'); Last = To_Print[i]; } if (Last != "") for (int i = 0; i < Last.size(); i++) Commands.push_back('-'); vector<string> EndStrings; for (int i = 0; i < N; i++) if (To_Print[i][0] == FinalLetter) EndStrings.push_back(To_Print[i]); MoveBiggestLast(EndStrings, MaxSize, Commands); cout<< Commands.size() << "\n"; for (int i = 0; i < Commands.size(); i++) cout<< Commands[i] << "\n"; return 0; }

Compilation message (stderr)

printer.cpp: In function 'void MoveBiggestLast(std::vector<std::__cxx11::basic_string<char> >&, int, std::vector<char>&)':
printer.cpp:31:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::__cxx11::basic_string<char> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |     for (int i = 0; i < EndStrings.size(); i++)
      |                     ~~^~~~~~~~~~~~~~~~~~~
printer.cpp:44:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::__cxx11::basic_string<char> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |         for (int i = 0; i < Str.size(); i++)
      |                         ~~^~~~~~~~~~~~
printer.cpp:50:35: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   50 |                 if (Str[i].size() == level)
      |                     ~~~~~~~~~~~~~~^~~~~~~~
printer.cpp:62:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |             for (int j = 0; j < Last.length() - sim; j++)
      |                             ~~^~~~~~~~~~~~~~~~~~~~~
printer.cpp:64:33: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |             for (int j = sim; j < Str[i].length(); j++)
      |                               ~~^~~~~~~~~~~~~~~~~
printer.cpp:73:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::__cxx11::basic_string<char> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |         for (int i = 0; i < Finishes.size(); i++)
      |                         ~~^~~~~~~~~~~~~~~~~
printer.cpp:77:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |             for (int j = 0; j < Last.length() - sim; j++)
      |                             ~~^~~~~~~~~~~~~~~~~~~~~
printer.cpp:79:33: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |             for (int j = sim; j < Finishes[i].length(); j++)
      |                               ~~^~~~~~~~~~~~~~~~~~~~~~
printer.cpp: In function 'int main()':
printer.cpp:107:32: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  107 |         if (To_Print[i].size() > MaxSize)
      |             ~~~~~~~~~~~~~~~~~~~^~~~~~~~~
printer.cpp:122:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  122 |         for (int j = 0; j < Last.length()- sim; j++)
      |                         ~~^~~~~~~~~~~~~~~~~~~~
printer.cpp:124:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  124 |         for (int j = sim; j < To_Print[i].length(); j++)
      |                           ~~^~~~~~~~~~~~~~~~~~~~~~
printer.cpp:132:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  132 |         for (int i = 0; i < Last.size(); i++)
      |                         ~~^~~~~~~~~~~~~
printer.cpp:143:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  143 |     for (int i = 0; i < Commands.size(); i++)
      |                     ~~^~~~~~~~~~~~~~~~~
printer.cpp:137:9: warning: 'FinalLetter' may be used uninitialized in this function [-Wmaybe-uninitialized]
  137 |         if (To_Print[i][0] == FinalLetter)
      |         ^~
#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...