Submission #1108140

#TimeUsernameProblemLanguageResultExecution timeMemory
1108140vjudge1Type Printer (IOI08_printer)C++17
30 / 100
83 ms28448 KiB
#include <iostream> #include <vector> #include <algorithm> int main(){ std::cin.tie(nullptr)->sync_with_stdio(false); int n; std::cin >> n; std::vector<std::string> strings(n); std::vector<std::vector<std::pair<char,int>>> trie(500001); std::vector<int> subtreeSize(500001); std::vector<bool> finalVertex(500001); int curVertices = 0; for(int i = 0; i < n; i++){ std::string s; std::cin >> s; int m = (int) s.length(); int curVertex = 0; for(int j = 0; j < m; j++){ bool found = false; for(std::pair<char,int> & p : trie[curVertex]){ if(p.first == s[j]){ found = true; curVertex = p.second; break; } } if(found == false){ curVertices += 1; trie[curVertex].push_back({s[j], curVertices}); curVertex = curVertices; } if(j == (m - 1)){ finalVertex[curVertex] = true; } } } auto dfs = [&trie, &subtreeSize](int u, int p, auto && self) -> void { subtreeSize[u] += 1; for(std::pair<char,int> & v : trie[u]){ if(v.second != p){ self(v.second, u, self); subtreeSize[u] += subtreeSize[v.second]; } } }; dfs(0, 0, dfs); for(int i = 0; i <= curVertices; i++){ sort(trie[i].begin(), trie[i].end(), [&subtreeSize](const std::pair<char,int> & a, const std::pair<char,int> & b) -> bool { return subtreeSize[a.second] < subtreeSize[b.second]; }); } int built = 0; std::vector<char> operations; auto build = [&trie, &curVertices, &finalVertex, &built, &operations](char c, int u, int p, auto && self) -> void{ if(u != 0){ operations.push_back(c); built += 1; } if(finalVertex[u]){ operations.push_back('P'); } for(std::pair<char,int> & v : trie[u]){ if(v.second != p){ self(v.first, v.second, u, self); } } if(built < curVertices){ operations.push_back('-'); } }; build('0', 0, 0, build); std::cout << operations.size() << '\n'; for(char & c : operations){ std::cout << c << '\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...