Submission #1271524

#TimeUsernameProblemLanguageResultExecution timeMemory
1271524WH8Type Printer (IOI08_printer)C++20
100 / 100
176 ms132316 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pll pair<int, int> #define mp make_pair #define pb push_back #define f first #define s second vector<vector<int>> to(500005, vector<int>(26, -1)); vector<int> reg(500005, -1), dep(500005, 0); vector<bool> endpoint(500005, 0); vector<char> ans; int n,nw=1, sat=0; void dfs(int x){ for(int i=0;i<26;i++){ if(to[x][i]!=-1){ dfs(to[x][i]); dep[x]=max(dep[to[x][i]]+1, dep[x]); } } } void dfs2(int x){ vector<pair<int,int>> depto; if(endpoint[x]){ ans.pb('P'); sat++; } for(int i=0;i<26;i++){ if(to[x][i]!=-1){ depto.push_back({dep[to[x][i]], to[x][i]}); } } sort(depto.begin(),depto.end()); for(auto [ul, to] : depto){ ans.pb((char)('a'+reg[to])); dfs2(to); } if(sat!=n)ans.pb('-'); } signed main(){ cin>>n; for(int i=0;i<n;i++){ string s; cin>>s; int x=0; for(int j=0;j<(int)s.size();j++){ int c=s[j]-'a'; if(to[x][c]==-1){ to[x][c]=nw; reg[nw]=c; x=nw; nw++; } else x=to[x][c]; if(j==(int)s.size()-1){ endpoint[x]=true; } } } dfs(0); dfs2(0); cout<<ans.size()<<"\n"; for(auto it:ans)cout<<it<<"\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...