제출 #1275470

#제출 시각아이디문제언어결과실행 시간메모리
1275470papauloType Printer (IOI08_printer)C++20
100 / 100
102 ms59868 KiB
#include <bits/stdc++.h> using namespace std; #define MAXI 500500 vector<char> ans; int trie[MAXI][26]; int has[MAXI]; int len[MAXI]; int mlen[MAXI]; int id=0; void insert(string s) { int n=0; for(char c : s) { int &t=trie[n][c-'a']; if(!t) { t=++id; } len[t]=len[n]+1; n=t; } has[n]=1; } void dfs1(int v) { mlen[v]=len[v]; for(int i=0;i<26;i++) { int u=trie[v][i]; if(!u) continue; dfs1(u); mlen[v]=max(mlen[v], mlen[u]); } } void dfs2(int v) { if(has[v]) ans.push_back('P'); for(int i=0;i<26;i++) { int u=trie[v][i]; if(!u||mlen[u]==mlen[v]) continue; ans.push_back('a'+i); dfs2(u); ans.push_back('-'); } for(int i=0;i<26;i++) { int u=trie[v][i]; if(!u||mlen[u]<mlen[v]) continue; ans.push_back('a'+i); dfs2(u); ans.push_back('-'); } } int main() { memset(trie, 0, sizeof(trie)); memset(has, 0, sizeof(has)); memset(len, 0, sizeof(len)); memset(mlen, 0, sizeof(mlen)); cin.tie(nullptr); ios::sync_with_stdio(false); int n; cin >> n; while(n--) { string s; cin >> s; insert(s); } dfs1(0); dfs2(0); for(int i=0;i<mlen[0];i++) ans.pop_back(); cout << ans.size() << endl; for(char c : ans) cout << c << "\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...