Submission #876989

#TimeUsernameProblemLanguageResultExecution timeMemory
876989StefanL2005Type Printer (IOI08_printer)C++14
30 / 100
50 ms4296 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 = ""; do { vector<string> Copy; vector<string> Finishes; for (int i = 0; i < Str.size(); i++) { if (EndStrings[GetPoz].substr(0, level) == Str[i].substr(0, level)) { if (Str[i].size() == level) Finishes.push_back(Str[i]); else Copy.push_back(EndStrings[i]); 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]; } 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 = Str[i]; } level++; Str = Copy; }while (Str.size() > 1 && level < EndStrings[GetPoz].size()); int sim = Similarities(Last, EndStrings[GetPoz]); for (int j = 0; j < Last.length() - sim; j++) Commands.push_back('-'); for (int j = sim; j < EndStrings[GetPoz].length(); j++) Commands.push_back(EndStrings[GetPoz][j]); Commands.push_back('P'); } int main() { 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:43: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]
   43 |         for (int i = 0; i < Str.size(); i++)
      |                         ~~^~~~~~~~~~~~
printer.cpp:47:35: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   47 |                 if (Str[i].size() == level)
      |                     ~~~~~~~~~~~~~~^~~~~~~~
printer.cpp:57:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |             for (int j = 0; j < Last.length() - sim; j++)
      |                             ~~^~~~~~~~~~~~~~~~~~~~~
printer.cpp:59:33: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |             for (int j = sim; j < Str[i].length(); j++)
      |                               ~~^~~~~~~~~~~~~~~~~
printer.cpp:66: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]
   66 |         for (int i = 0; i < Finishes.size(); i++)
      |                         ~~^~~~~~~~~~~~~~~~~
printer.cpp:70:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |             for (int j = 0; j < Last.length() - sim; j++)
      |                             ~~^~~~~~~~~~~~~~~~~~~~~
printer.cpp:72:33: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |             for (int j = sim; j < Finishes[i].length(); j++)
      |                               ~~^~~~~~~~~~~~~~~~~~~~~~
printer.cpp:80:37: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   80 |     }while (Str.size() > 1 && level < EndStrings[GetPoz].size());
      |                               ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
printer.cpp:84:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   84 |     for (int j = 0; j < Last.length() - sim; j++)
      |                     ~~^~~~~~~~~~~~~~~~~~~~~
printer.cpp:86:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |     for (int j = sim; j < EndStrings[GetPoz].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...