Submission #520066

#TimeUsernameProblemLanguageResultExecution timeMemory
520066HaYoungJoonType Printer (IOI08_printer)C++14
30 / 100
27 ms31976 KiB
#include <bits/stdc++.h> using namespace std; int cost[100001], trie[100001][26],timer = 0; int n; vector<int> adj[100001]; bool special[100001], finish[100001]; char label[100001]; vector<char> res; void addString(string s) { int cur = 0; for (char c: s) { int val = c - 'a'; if (!trie[cur][val]) { trie[cur][val] = ++timer; adj[cur].emplace_back(timer); label[timer] = c; } cur = trie[cur][val]; } special[cur] = 1; } void DFS_1(int u) { for (int v: adj[u]) { DFS_1(v); if (cost[v]) cost[u] += cost[v] + 1; } if (!cost[u]) if (special[u]) cost[u] = 1; } bool cmp(const int &A, const int &B) { return cost[A] + adj[A].size() < cost[B] + adj[B].size(); } void DFS_2(int u) { sort(adj[u].begin(),adj[u].end(),cmp); if (special[u]) { res.emplace_back('P'); n--; } for (int v: adj[u]) { if (!cost[v]) continue; res.emplace_back(label[v]); DFS_2(v); } if (n) res.emplace_back('-'); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; string s; for (int i = 1; i <= n; i++) { cin >> s; addString(s); } DFS_1(0); DFS_2(0); cout << res.size() << '\n'; for (char c: res) 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...