Submission #1319408

#TimeUsernameProblemLanguageResultExecution timeMemory
1319408algoproclubType Printer (IOI08_printer)C++20
20 / 100
36 ms21740 KiB
// UUID: f9fcc435-f29b-4326-92b4-bcd3eb95d661 #include <bits/stdc++.h> using namespace std; const int MAXN=21*25000+1; int trie[MAXN][26]; vector<int> word, utcs; vector<char> ki; int cnt=1; void add(string s){ int cur=0; for(char z:s){ if(!trie[cur][z-'a']) trie[cur][z-'a']=cnt++; cur=trie[cur][z-'a']; if(word[cur]==- 1) word[cur]=0; } word[cur]++; } void add2(string s){ int cur=0; for(char z:s){ if(!trie[cur][z-'a']) trie[cur][z-'a']=cnt++; utcs[cur]=z-'a'; cur=trie[cur][z-'a']; if(word[cur]==-1) word[cur]=0; } word[cur]++; } void dfs(int x){ for(int i=0; i<26; i++){ if(word[trie[x][i]]==-1||utcs[x]==i) continue; ki.push_back(i+'a'); dfs(trie[x][i]); } if(utcs[x]!=-1){ ki.push_back(utcs[x]+'a'); dfs(trie[x][utcs[x]]); } if(word[x]>0) ki.push_back('P'); if(x)ki.push_back('-'); } int main() { int n; cin>>n; vector<pair<int, string>> kak; word.resize(n*21+1, -1); utcs.resize(n*21+1, -1); for(int i=0; i<n; i++){ string s; cin>>s; kak.push_back({s.size(),s}); } sort(kak.rbegin(), kak.rend()); add2(kak[0].second); for(int i=1; i<n; i++) add(kak[i].second); dfs(0); int a=ki.size()-1; while(ki[a]=='-') a--; cout<<a+1<<"\n"; for(int i=0; i<=a; i++) cout<<ki[i]<<"\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...