Submission #647444

#TimeUsernameProblemLanguageResultExecution timeMemory
647444phoenixType Printer (IOI08_printer)C++17
100 / 100
172 ms99528 KiB
#include<bits/stdc++.h> using namespace std; struct node { node* to[ 26 ]; bool terminal = false; int h = 0; }; void add_string(node* v, string &s) { for(int i = 0;i < (int)s.size();i++) { if(!v->to[s[ i ] - 'a']) v->to[s[ i ] - 'a'] = new node(); v = v->to[s[ i ] - 'a']; v->h = max(v->h, (int)s.size() - 1 - i); } v->terminal = true; } vector<char> op; void dfs(node* v) { if(v->terminal) op.push_back('P'); vector<int> x; for(int i = 0;i < 26;i++) if(v->to[ i ]) x.push_back(i); sort(x.begin(), x.end(), [&](int a, int b){return v->to[ a ]->h < v->to[ b ]->h;}); for(int i : x) { op.push_back(i + 'a'); dfs(v->to[ i ]); op.push_back('-'); } } node trie; int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); int n; cin >> n; for(int i = 0;i < n;i++) { string s; cin >> s; add_string(&trie, s); } dfs(&trie); while(!op.empty() && op.back() == '-') op.pop_back(); cout << (int)op.size() << '\n'; for(char c : op) cout << c << '\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...