Submission #803312

#TimeUsernameProblemLanguageResultExecution timeMemory
803312UmairAhmadMirzaType Printer (IOI08_printer)C++14
100 / 100
169 ms111708 KiB
#include <bits/stdc++.h> using namespace std; int const N=1e5+5; struct node { char ch; map<char,node*> mp; set<pair<int,node*>> adj; int dep=1; int cnt=0; }; node* root; int tot=0; int maxx=0; void add(){ string s; cin>>s; int i=0; node* cur=root; maxx=max(maxx,int(s.length())); while(i<int(s.length())){ if(cur->mp[s[i]]==NULL){ cur->mp[s[i]]=new node(); tot++; cur->mp[s[i]]->ch=s[i]; } cur=cur->mp[s[i]]; i++; } cur->cnt++; } int dep_set(node* rt){ for(auto i:rt->mp){ rt->dep=max(rt->dep,dep_set(i.second)+1); rt->adj.insert({i.second->dep,i.second}); } return rt->dep; } vector<char> ans; void dfs1(node* rt){ for (int i = 0; i < rt->cnt; ++i) printf("%c\n",'P'); for(auto i:rt->adj){ printf("%c\n",i.second->ch); tot--; dfs1(i.second); if(tot!=0) printf("%c\n",'-'); } } int main(){ int t; cin>>t; root=new node(); for (int i = 0; i < t; ++i) add(); dep_set(root); printf("%d\n",(tot*2)+t-maxx); dfs1(root); return 0; }
#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...