Submission #1105392

#TimeUsernameProblemLanguageResultExecution timeMemory
1105392SwainTimeType Printer (IOI08_printer)C++14
100 / 100
186 ms106436 KiB
#include<bits/stdc++.h> using namespace std; vector<char> v; struct trie { int dep, rasp; trie *fii[27]; }; trie* init = new trie(); void add(trie *t, char *c) { if(*c == '\0') { t -> rasp++; return; } if(t -> fii[*c - 'a'] == NULL) t -> fii[*c - 'a'] = new trie(); add(t -> fii[*c - 'a'], c + 1); } void ans(trie *t) { for(int i = 1; i <= t -> rasp; i++) v.push_back('P'); vector<pair<int, int>> ord; for(int i = 0; i < 26; i++) { if(t -> fii[i] != NULL) { ord.push_back({t -> fii[i] -> dep, i}); } } sort(ord.begin(), ord.end()); for(auto u : ord) { v.push_back(char(u.second + 'a')); ans(t -> fii[u.second]); } v.push_back('-'); } void dfs_dep(trie *t) { t -> dep = 1; for(int i = 0; i < 26; i++) { if(t -> fii[i] != NULL) { dfs_dep(t -> fii[i]); t -> dep = max(t -> dep, (t -> fii[i] -> dep) + 1); } } } int main() { //freopen("trie.in", "r", stdin); //freopen("trie.out", "w", stdout); int n; char y[27]; cin >> n; for(int i = 1; i <= n; i++) { cin >> y; add(init, y); } for(int i = 0; i < 26; i++) if(init -> fii[i] != NULL) dfs_dep(init -> fii[i]); ans(init); while(v.back() == '-') v.pop_back(); cout << v.size() << "\n"; for(auto u : v) cout << u << "\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...