제출 #381313

#제출 시각아이디문제언어결과실행 시간메모리
381313jlallas384Type Printer (IOI08_printer)C++17
100 / 100
226 ms51680 KiB
#include <bits/stdc++.h> using namespace std; int nxt[500500][26]; int lst[500500]; int dep[500500]; int sz = 1; vector<char> ans; void add(string s){ int cur = 0; for(int i = 0; i < (int) s.size(); i++){ int c = s[i] - 'a'; if(!nxt[cur][c]) nxt[cur][c] = sz++; cur = nxt[cur][c]; } lst[cur] = true; } void dfs1(int v){ for(int i = 0; i < 26; i++) if(nxt[v][i]){ dfs1(nxt[v][i]); dep[v] = max(dep[v],dep[nxt[v][i]]+1); } } void dfs2(int v){ vector<pair<int,int>> ord; //(max hi,v); for(int i = 0; i < 26; i++) if(nxt[v][i]){ ord.emplace_back(dep[nxt[v][i]],i); } sort(ord.begin(), ord.end()); for(auto [hi,i]: ord){ ans.push_back(i + 'a'); if(lst[nxt[v][i]]) ans.push_back('P'); dfs2(nxt[v][i]); ans.push_back('-'); } } int main(){ int n; cin >> n; while(n--){ string s; cin >> s; add(s); } dfs1(0); dfs2(0); while(ans.back() != 'P') ans.pop_back(); cout << ans.size() << '\n'; for(char x: ans){ cout << x << "\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...