Submission #688597

#TimeUsernameProblemLanguageResultExecution timeMemory
688597rieyuwType Printer (IOI08_printer)C++17
20 / 100
108 ms70224 KiB
#include <bits/stdc++.h> using namespace std; const int TOTAL = 25000*20; vector<vector<int>> nxt(TOTAL, vector<int>(26)); vector<int> cnt(TOTAL); string ans = ""; void count(int node) { cnt[node] = 1; for (int i = 0; i < 26; ++i) { if (nxt[node][i] != 0) { count(nxt[node][i]); cnt[node] += cnt[nxt[node][i]]; } } } void dfs(int node) { vector<pair<int,int>> que; que.reserve(26); for (int i = 0; i < 26; ++i) if (nxt[node][i] != 0) que.push_back({cnt[nxt[node][i]], i}); sort(que.begin(), que.end()); bool term = (que.size() == 0); for (auto& p : que) { ans +=(char)('a'+p.second); dfs(nxt[node][p.second]); ans += '-'; } if (term) ans += 'P'; } int main() { ios::sync_with_stdio(0), cin.tie(0); int n; cin >> n; int MAXID = 0; ans.reserve(3*n); while(n--) { string s; cin >> s; int node = 0; for (char c : s) { if (nxt[node][c-'a'] == 0) nxt[node][c-'a'] = ++MAXID; node = nxt[node][c-'a']; } } count(0); dfs(0); while(ans.back() == '-') ans.pop_back(); cout << ans.size() << "\n"; for (char c : ans) cout << c << "\n"; }
#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...