Submission #437996

#TimeUsernameProblemLanguageResultExecution timeMemory
437996dutchType Printer (IOI08_printer)C++17
100 / 100
146 ms48836 KiB
#include <bits/stdc++.h> using namespace std; const int LIM = 20 * 25000; array<int, 26> g[LIM]; int a[LIM], toEnd = 0; bitset<LIM> bad; pair<int, string> mx = {0, ""}; void dfs(int u){ while(a[u]--) cout << "P\n"; if(u == toEnd) exit(0); for(int i=0; i<26; ++i){ if(!g[u][i] || bad[g[u][i]]) continue; cout << char('a' + i) << '\n'; dfs(g[u][i]); cout << "-\n"; } for(int i=0; i<26; ++i){ if(!g[u][i] || !bad[g[u][i]]) continue; cout << char('a' + i) << '\n'; dfs(g[u][i]); cout << "-\n"; } } signed main(){ cin.tie(0)->sync_with_stdio(0); int n, cnt = 0; cin >> n; for(int i=0; i<n; ++i){ string s; cin >> s; mx = max(mx, {s.size(), s}); int u = 0; for(char c : s){ if(!g[u][c-'a']) g[u][c-'a'] = ++cnt; u = g[u][c-'a']; } ++a[u]; } for(char c : mx.second){ bad[toEnd = g[toEnd][c-'a']] = 1; } cout << 2*cnt - mx.first + n << '\n'; dfs(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...