Submission #648460

#TimeUsernameProblemLanguageResultExecution timeMemory
648460Elias_ObeidType Printer (IOI08_printer)C++17
100 / 100
149 ms77432 KiB
#include <bits/stdc++.h> using namespace std; const int LEN = 25'000; const int ALPHABET = 26; struct TrieNode { bool is_leaf; int longest_word, longest_letter; array<int, ALPHABET> next_nodes; TrieNode() { is_leaf = false; longest_word = -1; longest_letter = -1; next_nodes.fill(-1); } }; int current_trie_node = 0; array<TrieNode, LEN * ALPHABET> trie; int fetchNode() { trie[current_trie_node] = TrieNode(); return current_trie_node++; } const int ROOT = fetchNode(); void addWord(const string &word) { int current_node = 0; for (int i = 0; i < (int)word.size(); ++i) { int letter = (word[i] - 'a'); if (trie[current_node].next_nodes[letter] == -1) { trie[current_node].next_nodes[letter] = fetchNode(); } if (trie[current_node].longest_word < (int)word.size() - 1 - i) { trie[current_node].longest_word = (int)word.size() - 1 - i; trie[current_node].longest_letter = letter; } current_node = trie[current_node].next_nodes[letter]; } trie[current_node].is_leaf = true; } vector<char> answer; void depthFirstSearch(int node) { if (trie[node].is_leaf) { answer.emplace_back('P'); } for (int letter = 0; letter < ALPHABET; ++letter) { if (trie[node].next_nodes[letter] != -1 && letter != trie[node].longest_letter) { answer.emplace_back(char(letter + 'a')); depthFirstSearch(trie[node].next_nodes[letter]); } } if (trie[node].longest_letter != -1) { answer.emplace_back(char(trie[node].longest_letter + 'a')); depthFirstSearch(trie[node].next_nodes[trie[node].longest_letter]); } answer.emplace_back('-'); } int main() { int N; cin >> N; for (int i = 0; i < N; ++i) { string S; cin >> S; addWord(S); } depthFirstSearch(ROOT); while (!answer.empty() && answer.back() == '-') { answer.pop_back(); } cout << (int)answer.size() << "\n"; for (char letter : answer) { cout << letter << "\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...