Submission #229324

#TimeUsernameProblemLanguageResultExecution timeMemory
229324andreiomdType Printer (IOI08_printer)C++11
100 / 100
66 ms4208 KiB
#include <bits/stdc++.h> using namespace std; const int NMAX = 25e3 + 1, LgMAX = 21; int N; struct Word { char S[LgMAX]; }; Word A[NMAX]; int K; char St[NMAX]; int Max; char V[LgMAX]; vector < char > Sol; static inline void Load () { ios_base :: sync_with_stdio(false); cin.tie(nullptr); cin >> N; for(int i = 1; i <= N; ++i) cin >> ((A[i].S) + 1); Max = (int)strlen(A[1].S + 1); for(int i = 1; i <= Max; ++i) V[i] = A[1].S[i]; for(int i = 2; i <= N; ++i) { int Now = (int)strlen(A[i].S + 1); if(Now <= Max) continue; Max = Now; for(int j = 1; j <= Max; ++j) V[j] = A[i].S[j]; } return; } static inline int Count (Word X) { int r = 0; for(int i = 1; i <= Max; ++i) if(X.S[i] == V[i]) ++r; else break; return r; } auto cmp = [] (Word A, Word B) { int lcp_A = Count(A); int lcp_B = Count(B); if(lcp_A < lcp_B) return 1; if(lcp_A > lcp_B) return 0; if(strcmp(A.S + 1, B.S + 1) < 0) return 1; return 0; }; static inline void Solve () { sort(A + 1, A + N + 1, cmp); for(int i = 1; i <= N; ++i) { int M = (int)strlen(A[i].S + 1); int Last = 0; for(int j = 1; j <= K; ++j) if(St[j] == A[i].S[j]) ++Last; else break; while(K != Last) { Sol.push_back('-'); --K; } for(int j = Last + 1; j <= M; ++j) { St[++K] = A[i].S[j]; Sol.push_back(St[K]); } Sol.push_back('P'); } return; } static inline void Write () { cout << (int)Sol.size() << '\n'; for(auto it : Sol) cout << it << '\n'; return; } int main() { Load(); Solve(); Write(); return 0; }
#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...