Submission #1065019

#TimeUsernameProblemLanguageResultExecution timeMemory
1065019YassirSalamaType Printer (IOI08_printer)C++17
90 / 100
1028 ms101652 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){ vector<pair<int,int>> v; for(int i=0;i<26;i++){ if(node->c[i]!=nullptr){ v.push_back({node->c[i]->maxdepth,i}); } } if(v.empty()){ k--; op.push_back('P'); return; } if(node->leaf){ k--; op.push_back('P'); } sort(v.begin(),v.end()); for(auto x:v){ op.push_back(char('a'+x.second)); dfs(node->c[x.second]); 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...