Submission #1195107

#TimeUsernameProblemLanguageResultExecution timeMemory
1195107damamilaType Printer (IOI08_printer)C++20
80 / 100
1098 ms20972 KiB
#include <bits/stdc++.h> using namespace std; vector<set<tuple<int, int, int>>> g (2); //l, letter, index vector<bool> fin (2); int cnt = 2; string ans; int n; void insrt(string s) { int idx = 1; for (int i = 0; i < s.size() ; i++) { int next = s[i]-'a'; int idx2 = 0; int len2 = s.size(); int other = 0; for (auto [len, let, ind] : g[idx]) { if (let == next) { len2 = max(len2, len); other = len; idx2 = ind; break; } } if (idx2 == 0) { idx2 = cnt; cnt++; g.push_back({}); fin.push_back(0); g[idx].insert({len2, next, idx2}); } else { g[idx].erase({other, next, idx2}); g[idx].insert({len2, next, idx2}); } idx = idx2; } fin[idx] = 1; } void dfs(int u) { if (fin[u]) { ans = ans+'P'+'\n'; n--; } for (auto [len, let, v] : g[u]) { ans = ans+char('a'+let)+'\n'; dfs(v); if (n > 0) ans = ans+'-'+'\n'; } } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; for (int i = 0; i < n; i++) { string s; cin >> s; insrt(s); } dfs(1); cout << ans.size()/2 << '\n' << ans; }
#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...