Submission #1294627

#TimeUsernameProblemLanguageResultExecution timeMemory
1294627nathlol2Type Printer (IOI08_printer)C++20
100 / 100
89 ms99184 KiB
#include <bits/stdc++.h> using namespace std; int n; string st; vector<char> ans; struct trie{ struct node{ int mx, ed; node *c[26]; node(){ mx = 0; ed = 0; for(int i = 0;i<26;i++) c[i] = 0; } }; typedef node* pnode; pnode rt = 0; void upd(pnode &k, string &s, int idx, int sz){ if(!k) k = new node(); if(idx == sz) return k->ed = 1, k->mx = max(k->mx, sz), void(); upd(k->c[s[idx] - 'a'], s, idx + 1, sz); k->mx = max(k->mx, k->c[s[idx] - 'a']->mx); } void dfs(pnode k){ if(k->ed) ans.push_back('P'); pair<int, int> hv = {-1, -1}; for(int i = 0;i<26;i++){ if(!k->c[i]) continue; hv = max(hv, {k->c[i]->mx, i}); } if(hv.second == -1) return ans.push_back('-'), void(); for(int i = 0;i<26;i++){ if(!k->c[i] || i == hv.second) continue; //cout << k->mx << '\n'; ans.push_back(i + 'a'); dfs(k->c[i]); } ans.push_back(hv.second + 'a'); dfs(k->c[hv.second]); ans.push_back('-'); } }t; signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i = 0;i<n;i++){ cin >> st; t.upd(t.rt, st, 0, st.size()); } t.dfs(t.rt); for(int i = 0;i<=t.rt->mx;i++) ans.pop_back(); cout << ans.size() << '\n'; for(auto x : ans) cout << x << '\n'; }
#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...