Submission #1315184

#TimeUsernameProblemLanguageResultExecution timeMemory
1315184algoproclubType Printer (IOI08_printer)C++20
80 / 100
45 ms35812 KiB
// UUID: 6b28326b-85e8-4fe9-8796-61663562b6df #include <bits/stdc++.h> using namespace std; vector<vector<int>> trie(2.5e5+1, vector<int>(26, 0)); vector<bool> word_end(2.5e5+1, false); vector<int> utso(2.5e5+1, -1); vector<char>out; int cmt = 1; void add(string word, bool last){ int x = 1; for(char c: word){ int j = c - 'a'; if(!trie[x][j]){ cmt++; trie[x][j] = cmt; } if(last) utso[x] = j; x = trie[x][j]; } word_end[x] = true; } void dfs(int csucs){ if(word_end[csucs]) out.push_back('P'); for(int i = 0; i < 26; i++){ if(utso[csucs] == i || trie[csucs][i] == 0){ continue; } out.push_back(char(i+'a')); dfs(trie[csucs][i]); } if(utso[csucs] != -1){ out.push_back(char(utso[csucs]+'a')); dfs(trie[csucs][utso[csucs]]); } out.push_back('-'); } int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; string mx_word = ""; for(int i = 0; i < n; i++){ string s; cin >> s; add(s, false); if(s.size() > mx_word.size()){ mx_word = s; } } add(mx_word, true); dfs(1); cout << out.size()-mx_word.size()-1 << "\n"; for(int i = 0; i < out.size()-mx_word.size()-1; i++){ cout << out[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...