Submission #1178916

#TimeUsernameProblemLanguageResultExecution timeMemory
1178916sasdeType Printer (IOI08_printer)C++20
100 / 100
97 ms58048 KiB
#include <bits/stdc++.h> #define emb emplace_back using namespace std; const int N = 500005; struct Trie { int child[26]; int cnt = 0; int h = 0; } tr[N]; int node_cnt = 1; void add(int root, const string &s) { int cur = root; for (char x : s) { int c = x - 'a'; if (tr[cur].child[c] == 0) { tr[cur].child[c] = node_cnt++; } cur = tr[cur].child[c]; } tr[cur].cnt++; } vector<char> res; void query1(int root) { while (tr[root].cnt--) { res.emb('P'); } int u = -1, v = -1; for (int i = 0; i < 26; ++i) { if (tr[root].child[i] == 0) continue; if (tr[tr[root].child[i]].h > u) { u = tr[tr[root].child[i]].h; v = i; } } for (int i = 0; i < 26; ++i) { if (tr[root].child[i] == 0 || i == v) continue; res.emb('a' + i); query1(tr[root].child[i]); res.emb('-'); } if (v != -1) { res.emb('a' + v); query1(tr[root].child[v]); res.emb('-'); } } void query(int root, int u) { tr[root].h = max(tr[root].h, u); for (int i = 0; i < 26; ++i) { if (tr[root].child[i] == 0) continue; query(tr[root].child[i], u + 1); tr[root].h = max(tr[root].h, tr[tr[root].child[i]].h); } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; string s; cin >> n; for (int i = 1; i <= n; ++i) { cin >> s; add(0, s); } query(0, 0); query1(0); while (!res.empty() && res.back() == '-') res.pop_back(); cout << res.size() << '\n'; for (char x : res) cout << x << '\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...