제출 #1281598

#제출 시각아이디문제언어결과실행 시간메모리
1281598Jawad_Akbar_JJType Printer (IOI08_printer)C++20
100 / 100
70 ms35768 KiB
#include <iostream> #include <vector> using namespace std; int Ans; struct node{ char cur; int hei = 0, eow = 0; vector<node*> vec; void insert(string &s, int ind){ if (ind == s.size()){ hei = max(hei, (int)s.size()); eow++; return; } hei = max(hei, (int)s.size()); for (int i=0;i<vec.size();i++){ if (vec[i]->cur == s[ind]){ vec[i]->insert(s, ind+1); if (i != vec.size() - 1 and vec[vec.size() - 1]->hei < vec[i]->hei) swap(vec[i], vec[vec.size() - 1]); return; } } node *Nw = new node(); Nw->cur = s[ind]; Nw->insert(s, ind+1); vec.push_back(Nw); if (vec.size() > 1 and vec[vec.size()-2]->hei > Nw->hei) swap(vec[vec.size() - 2], vec[vec.size() - 1]); Ans += 2; } void traverse(bool t){ if (eow > 0) cout<<"P\n"; for (int i=0;i<vec.size();i++){ cout<<vec[i]->cur<<'\n'; vec[i]->traverse(t & (i == vec.size() - 1)); } if (!t) cout<<"-\n"; } }; int main(){ int n; cin>>n; node *rt = new node(); for (int i=1;i<=n;i++){ string s; cin>>s; rt->insert(s, 0); } cout<<Ans - rt->hei + n<<'\n'; rt->traverse(1); }
#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...