제출 #1158264

#제출 시각아이디문제언어결과실행 시간메모리
1158264AlgorithmWarriorType Printer (IOI08_printer)C++20
100 / 100
170 ms43944 KiB
#include <bits/stdc++.h> using namespace std; struct node { vector<pair<int,node*>>child; int cuv; node* longest; int maxim; node(int nr) { longest=0; maxim=0; cuv=0; } }; node *root=new node(0); string rasp; node* fp(node* nod,int nr) { for(auto per : nod->child) if(per.first==nr) return per.second; return 0; } void adauga(string word,int ind,node* nod) { if(word.size()>ind) { int urm=word[ind]-'a'; if(!fp(nod,urm)) nod->child.push_back({urm,new node(0)}); adauga(word,ind+1,fp(nod,urm)); } else if(word.size()==ind) ++nod->cuv; } void dfs0(node* nod) { int i; for(i=0;i<26;++i) if(fp(nod,i)) { dfs0(fp(nod,i)); if(fp(nod,i)->maxim>nod->maxim) { nod->maxim=fp(nod,i)->maxim; nod->longest=fp(nod,i); } } ++nod->maxim; } void dfs(node* nod) { while(nod->cuv--) rasp.push_back('P'); if(nod->longest){ int i; char lit; for(i=0;i<26;++i) if(fp(nod,i)) if(fp(nod,i)==nod->longest) lit=i; else { rasp.push_back(i+'a'); dfs(fp(nod,i)); } rasp.push_back(lit+'a'); dfs(nod->longest);} rasp.push_back('-'); } int main() { int n; cin>>n; while(n--) { string s; cin>>s; adauga(s,0,root); } dfs0(root); dfs(root); while(rasp.back()=='-') rasp.pop_back(); cout<<rasp.size()<<'\n'; for(auto ch : rasp) cout<<ch<<'\n'; 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...