Submission #1256144

#TimeUsernameProblemLanguageResultExecution timeMemory
1256144minhpkType Printer (IOI08_printer)C++20
100 / 100
88 ms52924 KiB
#include <bits/stdc++.h> using namespace std; int child[2000005][26]; int isend[2000005]; int cnt=0; int par[2000005]; int low[2000005]; vector <char> v; void rev(int k){ int pre=1; while (k>0){ low[k]=max(low[k],pre); k=par[k]; pre++; } } void add(string s){ int k=0; for (auto c:s){ if (child[k][c-'a']==0){ cnt++; child[k][c-'a']=cnt; par[cnt]=k; } k=child[k][c-'a']; } isend[k]++; rev(k); } void get(int k){ for (int i=1;i<=isend[k];i++){ v.push_back('P'); } int trace=-1,max1=0; for (int i=0;i<=25;i++){ if (child[k][i]){ if (max1<low[child[k][i]]){ max1=low[child[k][i]]; trace=i; } } } for (int i=0;i<=25;i++){ if (child[k][i] && i!=trace){ v.push_back(char(i+'a')); get(child[k][i]); v.push_back('-'); } } if (trace!=-1){ v.push_back(char(trace+'a')); get(child[k][trace]); v.push_back('-'); } } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int a; cin >> a; for (int i=1;i<=a;i++){ string s; cin >> s; add(s); } get(0); while (v.back()=='-'){ v.pop_back(); } cout << v.size() << "\n"; for (auto c:v){ cout << c<<"\n"; } 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...