Submission #1065026

#TimeUsernameProblemLanguageResultExecution timeMemory
1065026YassirSalamaType Printer (IOI08_printer)C++17
90 / 100
1018 ms101068 KiB
#include<bits/stdc++.h> using namespace std; struct Node{ Node* c[26]; int maxdepth=0; bool leaf=false; Node(){ for(int i=0;i<26;i++) c[i]=nullptr; } }; Node* root=new Node(); void insert(string s){ Node* node=root; int n=s.length(); for(int i=0;i<n;i++){ if(node->c[s[i]-'a']==nullptr) node->c[s[i]-'a'] = new Node(); node=node->c[s[i]-'a']; node->maxdepth=max(node->maxdepth,n); } node->leaf=true; } int k; vector<char> op; void dfs(Node* node){ int best=-1; int mx=-1; for(int i=0;i<26;i++){ if(node->c[i]!=nullptr){ if(node->c[i]->maxdepth>mx){ mx=node->c[i]->maxdepth; best=i; } } } if(node->leaf){ k--; op.push_back('P'); } for(int j=0;j<26;j++){ if(node->c[j]){ if(j==best) continue; op.push_back(char('a'+j)); dfs(node->c[j]); if(k!=0) op.push_back('-'); } } if(best!=-1){ op.push_back(char(best+'a')); dfs(node->c[best]); if(k!=0) op.push_back('-'); } } signed main(){ int n; cin>>n; k=n; vector<string> v(n); for(int i=0;i<n;i++){ cin>>v[i]; insert(v[i]); } dfs(root); cout<<op.size()<<endl; for(auto x:op){ cout<<x<<endl; } }
#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...