제출 #1320230

#제출 시각아이디문제언어결과실행 시간메모리
1320230kawhietType Printer (IOI08_printer)C++20
100 / 100
96 ms49764 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "debug.h" #else #define dbg(...) 47 #endif constexpr int N = 5e5 + 5; int trie[N][26], cnt = 0; bool is_end[N]; void insert(string s) { int node = 0; for (auto c : s) { int j = c - 'a'; if (trie[node][j] == 0) { trie[node][j] = ++cnt; } node = trie[node][j]; } is_end[node] = 1; } int d[N]; void dfs_dist(int u) { for (int i = 0; i < 26; i++) { if (trie[u][i]) { dfs_dist(trie[u][i]); d[u] = max(d[u], d[trie[u][i]] + 1); } } } string k; void dfs(int u) { if (is_end[u]) { k.push_back('P'); } vector<array<int, 2>> v; for (int i = 0; i < 26; i++) { if (trie[u][i] == 0) continue; v.push_back({d[trie[u][i]], i}); } ranges::sort(v); for (auto [_, i] : v) { k.push_back(i + 'a'); dfs(trie[u][i]); k.push_back('-'); } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; for (int i = 0; i < n; i++) { string s; cin >> s; insert(s); } dfs_dist(0); dfs(0); while (k.back() == '-') k.pop_back(); cout << k.size() << '\n'; for (auto c : k) { cout << c << '\n'; } return 0; }
#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...