제출 #1018235

#제출 시각아이디문제언어결과실행 시간메모리
1018235MardonbekhazratovType Printer (IOI08_printer)C++17
100 / 100
76 ms48736 KiB
#include<bits/stdc++.h> using namespace std; const int mxN=5e5+5; int trie[mxN][26]; int node_cnt = 0; bool stop[mxN]; vector<char>ans; string longest; void insert(string&s){ int node=0; for(char c:s){ if(trie[node][c-'a']==0) trie[node][c-'a']=++node_cnt; node=trie[node][c-'a']; } stop[node]=true; } void dfs(int node,int depth){ if(stop[node]) ans.push_back('P'); bool ok=false; for(int i=0;i<26;i++){ if(trie[node][i]!=0 && i==longest[depth]-'a'){ ok=true; continue; } if(trie[node][i]==0) continue; ans.push_back(char(i+'a')); dfs(trie[node][i],depth+1); ans.push_back('-'); } if(ok){ ans.push_back(longest[depth]); dfs(trie[node][longest[depth]-'a'],depth+1); ans.push_back('-'); } } signed main(){ int n; cin>>n; longest=""; for(int i=0;i<n;i++){ string s; cin>>s; insert(s); if(s.size()>longest.size()) swap(longest,s); } dfs(0,0); while(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...