# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
858946 | 2023-10-09T12:39:55 Z | ntkphong | Type Printer (IOI08_printer) | C++14 | 119 ms | 57528 KB |
#include <bits/stdc++.h> using namespace std; struct node { int w_count; int child[26]; }; int n; vector<node> tree; vector<int> h, mark; vector<char> answer; int id_max; void new_node() { node x; x.w_count = 0; for(int i = 0; i < 26; i ++) x.child[i] = -1; tree.push_back(x); } void init() { new_node(); } void add(string s) { int idx = 0; for(int i = 0; i < s.size(); i ++) { int w = s[i] - 'a'; if(tree[idx].child[w] == -1) { new_node(); tree[idx].child[w] = tree.size() - 1; } idx = tree[idx].child[w]; } tree[idx].w_count ++ ; } void dfs(int u, int par) { vector<int> g; for(int i = 0; i < 26; i ++) { int v = tree[u].child[i]; if(v == -1) continue ; g.push_back(v); } if(g.size() > 1) { h[u] = 0; } if(g.size() == 0 || g.size() == 1) { h[u] = max(1, h[par] + 1); } if(g.size() == 0) { if(h[u] > h[id_max]) { id_max = u; } } for(int v : g) { dfs(v, u); } } void DFS(int u) { if(u == id_max) { mark[u] = 1; return ; } for(int i = 0; i < 26; i ++) { int v = tree[u].child[i]; if(v == -1) continue ; DFS(v); mark[u] = (mark[u] || mark[v]); } } void _dfs(int u) { for(int i = 1; i <= tree[u].w_count; i ++) answer.push_back('P'); if(u == id_max) { cout << answer.size() << "\n"; for(auto c : answer) cout << c << "\n"; exit(0); } for(int i = 0; i < 26; i ++) { int v = tree[u].child[i]; if(v == -1) continue ; if(!mark[v]) { answer.push_back((char)(i + 'a')); _dfs(v); answer.push_back('-'); } } for(int i = 0; i < 26; i ++) { int v = tree[u].child[i]; if(v == -1) continue ; if(mark[v]) { answer.push_back((char)(i + 'a')); _dfs(v); answer.push_back('-'); } } } int main() { #define taskname "" if(fopen(taskname".inp", "r")) { freopen(taskname".inp", "r", stdin); freopen(taskname".out", "w", stdout); } cin.tie(0)->sync_with_stdio(0); cin >> n; init(); for(int i = 1; i <= n; i ++) { string s; cin >> s; add(s); } h.resize(tree.size()); mark.resize(tree.size()); dfs(0, 0); DFS(0); _dfs(0); return 0; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 344 KB | Output is correct |
2 | Correct | 0 ms | 452 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 344 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 604 KB | Output is correct |
2 | Correct | 2 ms | 1032 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 3 ms | 1324 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 8 ms | 5396 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 19 ms | 8396 KB | Output is correct |
2 | Correct | 8 ms | 2420 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 53 ms | 29128 KB | Output is correct |
2 | Correct | 119 ms | 57528 KB | Output is correct |
3 | Correct | 64 ms | 29896 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 40 ms | 16664 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |