Submission #581106

#TimeUsernameProblemLanguageResultExecution timeMemory
581106LucaIlieType Printer (IOI08_printer)C++17
30 / 100
66 ms4916 KiB
#include <bits/stdc++.h> #define MAX_N 25000 #define MAX_LEN 20 using namespace std; int lcp[MAX_N - 1]; string s[MAX_N]; vector <char> sol; int main() { int n, minLen, first, last, i, j, l; bool cresc; cin >> n; for ( i = 0; i < n; i++ ) cin >> s[i]; sort( s, s + n ); for ( i = 0; i < n; i++ ) { j = (i + 1) % n; l = 0; while ( l < s[i].size() && l < s[j].size() && s[i][l] == s[j][l] ) l++; lcp[i] = l; } minLen = MAX_LEN + 1; last = -1; cresc = true; for ( i = 0; i < n; i++ ) { if ( 2 * lcp[i] - (int)s[i].size() < minLen ) { minLen = 2 * lcp[i] - (int)s[i].size(); last = i; cresc = true; } if ( 2 * lcp[(i - 1 + n) % n] - (int)s[i].size() < minLen ) { minLen = 2 * lcp[i] - (int)s[i].size(); last = i; cresc = false; } } if ( cresc ) { first = (last + 1) % n; l = 0; for ( int k = 0; k < n; k++ ) { i = (first + k) % n; j = (i - 1 + n) % n; while ( l > lcp[j] ) { sol.push_back( '-' ); l--; } while ( l < s[i].size() ) { sol.push_back( s[i][l] ); l++; } sol.push_back( 'P' ); } } else { first = (last - 1 + n) % n; l = 0; for ( int k = 0; k < n; k++ ) { i = (first - k + n) % n; j = (i - 1 + n) % n; while ( l > lcp[j] ) { sol.push_back( '-' ); l--; } while ( l < s[i].size() ) { sol.push_back( s[i][l] ); l++; } sol.push_back( 'P' ); } } cout << sol.size() << "\n"; for ( char o: sol ) cout << o << "\n"; return 0; }

Compilation message (stderr)

printer.cpp: In function 'int main()':
printer.cpp:25:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |         while ( l < s[i].size() && l < s[j].size() && s[i][l] == s[j][l] )
      |                 ~~^~~~~~~~~~~~~
printer.cpp:25:38: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |         while ( l < s[i].size() && l < s[j].size() && s[i][l] == s[j][l] )
      |                                    ~~^~~~~~~~~~~~~
printer.cpp:56:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |             while ( l < s[i].size() ) {
      |                     ~~^~~~~~~~~~~~~
printer.cpp:72:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |             while ( l < s[i].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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...