Submission #438004

#TimeUsernameProblemLanguageResultExecution timeMemory
438004dutchType Printer (IOI08_printer)C++17
100 / 100
113 ms48404 KiB
#include <bits/stdc++.h> using namespace std; const int LIM = 20 * 25000; array<int, 26> g[LIM]; int a[LIM], b[LIM], w = 0, j = 0; pair<int, string> mx = {0, ""}; void dfs(int u){ while(a[u]--) cout << "P\n"; if(u == w) exit(0); for(int i=0; i<26; ++i){ if(!g[u][i] || g[u][i] == b[u]) continue; cout << char('a' + i) << '\n'; dfs(g[u][i]); cout << "-\n"; } if(!b[u]) return; cout << mx.second[j++] << '\n'; dfs(b[u]); cout << "-\n"; } signed main(){ cin.tie(0)->sync_with_stdio(0); int n, e = 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'] = ++e; u = g[u][c-'a']; } ++a[u]; } for(char c : mx.second) b[w] = g[w][c-'a'], w = b[w]; cout << 2*e - 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...