제출 #1312582

#제출 시각아이디문제언어결과실행 시간메모리
1312582algoproclubType Printer (IOI08_printer)C++20
100 / 100
100 ms62292 KiB
// UUID: 96a25cc1-e291-4669-9223-5e82ba9535dc #include <bits/stdc++.h> using namespace std; vector<int> sam(26, 0); vector<bool> e = {false}; vector<vector<int>> trie = {sam}; string lst, ans; void add(string s) { if (lst.size() < s.size()) lst = s; int node = 0; for (char c : s) { int i = c - 'a'; if (!trie[node][i]) { trie[node][i] = trie.size(); trie.push_back(sam); e.push_back(false); } node = trie[node][i]; } e[node] = true; } void dfs(int node, int lev, bool f) { if (e[node]) ans.push_back('P'); for (int i = 0; i < 26; i++) { if (!trie[node][i]) continue; if (f && lst[lev] == i + 'a') continue; ans.push_back(i + 'a'); dfs(trie[node][i], lev + 1, false); } if (f && lev == lst.size()) return; if (f) { ans.push_back(lst[lev]); dfs(trie[node][lst[lev] - 'a'], lev + 1, true); } else ans.push_back('-'); } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; while (n--) { string s; cin >> s; add(s); } dfs(0, 0, true); cout << ans.size() << "\n"; for (char c : ans) 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...