Submission #1190424

#TimeUsernameProblemLanguageResultExecution timeMemory
1190424boclobanchatType Printer (IOI08_printer)C++20
100 / 100
106 ms94032 KiB
#include<bits/stdc++.h> using namespace std; struct node { int child[26],F[26],cnt; }; const int MAXN=555555; int cnode=1; node trie[MAXN]; vector<char> ans; void ins(string s) { int pos=1,len=s.length(); for(auto v:s) { int a=v-'a'; if(!trie[pos].child[a]) trie[pos].child[a]=++cnode; trie[pos].F[a]=max(trie[pos].F[a],len),pos=trie[pos].child[a]; } trie[pos].cnt++; } void solve(int pos) { if(trie[pos].cnt) ans.push_back('P'); vector< tuple<int,int,int> > vi; for(int i=0;i<26;i++) if(trie[pos].child[i]) vi.push_back((tuple<int,int,int>){trie[pos].F[i],trie[pos].child[i],i}); sort(vi.begin(),vi.end()); for(auto v:vi) { ans.push_back(char(get<2>(v)+'a')); solve(get<1>(v)); ans.push_back('-'); } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,mx=0; cin>>n; for(int i=1;i<=n;i++) { string res; cin>>res; ins(res); mx=max(mx,(int)res.length()); } solve(1); while(mx--) ans.pop_back(); cout<<ans.size()<<"\n"; for(auto v:ans) cout<<v<<"\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...