제출 #520080

#제출 시각아이디문제언어결과실행 시간메모리
520080HaYoungJoonType Printer (IOI08_printer)C++14
100 / 100
146 ms73796 KiB
#include <bits/stdc++.h> using namespace std; int trie[500001][26],timer = 0; int n; vector<int> adj[500001]; bool mark[500001], special[500001]; char label[500001]; 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 markLongest(string s) { int cur = 0; for (char c: s) { int val = c - 'a'; mark[trie[cur][val]] = 1; cur = trie[cur][val]; } mark[cur] = 1; } void DFS(int u) { int cnt = 0; if (special[u]) { res.emplace_back('P'); n--; } for (int v: adj[u]) { if (mark[v]) continue; cnt++; res.emplace_back(label[v]); DFS(v); } for (int v: adj[u]) { if (!mark[v]) continue; cnt++; res.emplace_back(label[v]); DFS(v); } if (n) res.emplace_back('-'); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; string s, longest; for (int i = 1; i <= n; i++) { cin >> s; addString(s); if (longest.size() < s.size()) longest = s; } markLongest(longest); DFS(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...