Submission #1283553

#TimeUsernameProblemLanguageResultExecution timeMemory
1283553catsarecool5530Type Printer (IOI08_printer)C++20
100 / 100
246 ms92648 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define endl "\n"; #define all(x) x.begin(), x.end() #define int long long const int MOD = 1e9 + 7; const ll INF = 1e18; const int MAXLEN = 25*25000; int trie[MAXLEN][26]; bool finish[MAXLEN]; int nodeCount; vector<char> ans; void insert(string& s) { int curNode = 0; for (char c : s) { if (trie[curNode][c-'a'] == 0) { trie[curNode][c-'a'] = ++nodeCount; } curNode = trie[curNode][c-'a']; } finish[curNode] = true; } int maxDepth(int node) { int d = 0; for (int i = 0; i < 26; i++) { if (trie[node][i] != 0) { d = max(d, 1 + maxDepth(trie[node][i])); } } return d; } void traverse(int node) { if (finish[node]) { ans.push_back('P'); } int maxD = 0; int maxDIndex = -1; for (int i = 0; i < 26; i++) { if (trie[node][i] == 0) continue; int d = maxDepth(trie[node][i]); if (d > maxD) { maxD = d; maxDIndex = i; } } for (int i = 0; i < 26; i++) { if (trie[node][i] == 0 || i == maxDIndex) continue; ans.push_back((char) (i + 'a')); traverse(trie[node][i]); } if (maxDIndex != -1) { ans.push_back((char) ('a' + maxDIndex)); traverse(trie[node][maxDIndex]); } ans.push_back('-'); } void solve() { int n; cin >> n; nodeCount = 0; for (int i = 0; i < n; i++) { string s; cin >> s; insert(s); } traverse(0); while (ans.back() == '-') { ans.pop_back(); } cout << ans.size() << endl; for (char c : ans) { cout << c << endl; } } signed main() { ios::sync_with_stdio(0); cin.tie(NULL); // freopen("island.in", "r", stdin); // freopen("ans.out", "w", stdout); ll t = 1; //cin >> t; while (t--) { solve(); } }
#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...