Submission #1124108

#TimeUsernameProblemLanguageResultExecution timeMemory
1124108Khalid_AlabdullatifType Printer (IOI08_printer)C++20
100 / 100
181 ms50264 KiB
#include <bits/stdc++.h> #define F first #define S second typedef long long ll; using namespace std; const int N=1e6+1,mod=1e9+7; int trie[N][26],mxd[N]; char c[N]; bool leaf[N]; int n; int sz=0; bool cmp(int a,int b){ return mxd[a]<mxd[b]; } void insert(string t){ int node=0,siz=t.size(); for(int i=0;i<siz;i++){ mxd[node]=max(mxd[node],siz-i); if(trie[node][t[i]-'a']==0)trie[node][t[i]-'a']=++sz; node=trie[node][t[i]-'a']; c[node]=t[i]; } leaf[node]=1; } int cnt=0; bool stop=0; vector<char>ans; void dfs(int node=0){ if(leaf[node]){ ans.push_back('P'); cnt++; if(cnt==n) stop=1; } sort(trie[node],trie[node]+26,cmp); for(int i=0;i<26;i++){ if(!trie[node][i])continue; ans.push_back(c[trie[node][i]]); dfs(trie[node][i]); } if(!stop) ans.push_back('-'); } int main() { cin>>n; for(int i=0;i<n;i++){ string t; cin>>t; insert(t); } dfs(); cout<<ans.size()<<'\n'; for(auto i:ans) cout<<i<<'\n'; return 0; }
#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...