Submission #1175445

#TimeUsernameProblemLanguageResultExecution timeMemory
1175445joonyouType Printer (IOI08_printer)C++20
100 / 100
122 ms57968 KiB
#include <bits/stdc++.h> using namespace std; const int ALPHA = 26; struct Trie { struct Node { int child[ALPHA] = {}; int subtreeSize = 0; bool isWord = 0; }; vector<Node> trie; Trie() { trie.emplace_back(); } void add(string& s) { int node = 0; for(auto c : s) { int cIdx = c-'a'; if(!trie[node].child[cIdx]) { trie[node].child[cIdx] = trie.size(); trie.emplace_back(); } node = trie[node].child[cIdx]; } trie[node].isWord = 1; } int calcSubtree(int node = 0) { trie[node].subtreeSize = 0; for(int i = 0; i < 26; i++) { if(!trie[node].child[i]) continue; trie[node].subtreeSize = max(trie[node].subtreeSize, calcSubtree(trie[node].child[i])); } trie[node].subtreeSize++; return trie[node].subtreeSize; } void dfs(int node, vector<char>& ans) { if(trie[node].isWord) ans.push_back('P'); int mx = 0, mxChld = -1; for(int i = 0; i < 26; i++) { if(!trie[node].child[i]) continue; if(trie[trie[node].child[i]].subtreeSize > mx) { mx = trie[trie[node].child[i]].subtreeSize; mxChld = i; } } for(int i = 0; i < 26; i++) { if(i == mxChld || !trie[node].child[i]) continue; ans.push_back('a'+i); dfs(trie[node].child[i], ans); } if(~mxChld) { ans.push_back('a'+mxChld); dfs(trie[node].child[mxChld], ans); } ans.push_back('-'); } }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >>n; Trie tr; while(n--) { string s; cin >>s; tr.add(s); } tr.calcSubtree(); vector<char> ans; tr.dfs(0, ans); while(ans.back() != 'P') ans.pop_back(); cout <<ans.size() <<'\n'; for(auto i : ans) cout <<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...