제출 #1196640

#제출 시각아이디문제언어결과실행 시간메모리
1196640nikolashamiType Printer (IOI08_printer)C++20
100 / 100
112 ms99056 KiB
#include<bits/stdc++.h> using namespace std; using ll=long long; #define pb push_back const ll N=5e5+1; ll ch[N][26],duz[N],term[N],nd=1; vector<char>ans; void ins(string s){ ll u=1; for(int i=0;i<s.size();++i){ ll x=s[i]-'a'; duz[u]=max(duz[u],(ll)s.size()-i); if(!ch[u][x])ch[u][x]=++nd; u=ch[u][x]; } term[u]=1; } void dfs(ll u,ll sl){ if(sl!=-1)ans.pb(sl+'a'); if(term[u])ans.pb('P'); ll nx=69; for(int i=0;i<26;++i) if(ch[u][i]&&duz[u]==duz[ch[u][i]]+1)nx=i; for(int i=0;i<26;++i) if(ch[u][i]&&i!=nx)dfs(ch[u][i],i); if(nx<69)dfs(ch[u][nx],nx); if(u!=1)ans.pb('-'); } signed main(){ ios::sync_with_stdio(0); cin.tie(0); ll n;cin>>n; while(n--){ string s; cin>>s; ins(s); } dfs(1,-1); while(ans.size()&&ans.back()=='-') ans.pop_back(); cout<<ans.size()<<'\n'; 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...