Submission #1224714

#TimeUsernameProblemLanguageResultExecution timeMemory
1224714akmuhammet_sType Printer (IOI08_printer)C++20
100 / 100
134 ms99124 KiB
#include<iostream> #include<string.h> #include<string> #include<vector> #include<set> using namespace std; struct tree{ tree* ch[26]; int cnt; int f; }; tree* root; vector<char> ans; void in(string s){ tree* nd=root; for(int i=0; i<s.size(); i++){ if(nd->ch[s[i]-'a']==NULL){ nd->ch[s[i]-'a']=new tree(); } nd=nd->ch[s[i]-'a']; nd->cnt=max(nd->cnt,(int)(s.size()-i)); } nd->f++; } void out(tree* nd){ for(int i=0; i<nd->f; i++){ ans.push_back('P'); } vector<pair<int,int> > p; for(int i=0; i<26; i++){ if(nd->ch[i]!=NULL){ p.push_back({nd->ch[i]->cnt,i}); } } sort(p.begin(),p.end()); for(int i=0; i<p.size(); i++){ ans.push_back(char(p[i].second+97)); out(nd->ch[p[i].second]); ans.push_back('-'); } } int main(){ root=new tree(); int n; cin>>n; for(int i=0; i<n; i++){ string s; cin>>s; in(s); } out(root); while(ans[ans.size()-1]=='-'){ ans.pop_back(); } cout<<ans.size()<<'\n'; for(int i=0; i<ans.size(); i++){ cout<<ans[i]<<"\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...