Submission #1247658

#TimeUsernameProblemLanguageResultExecution timeMemory
1247658inkvizytorType Printer (IOI08_printer)C++20
100 / 100
108 ms71636 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long vector<vector<int>> tr (5e5+3, vector<int>(26, -1)); vector<int> m (5e5+3, 0); vector<bool> czy (5e5+3, 0); int trsize = 1; void add(int v, string &s, int i) { if (i == (int)s.size()) { czy[v] = 1; return; } if (tr[v][s[i]-'a'] == -1) { tr[v][s[i]-'a'] = trsize; trsize++; } m[tr[v][s[i]-'a']] = max(m[tr[v][s[i]-'a']], (int)s.size()); add(tr[v][s[i]-'a'], s, i+1); } void print(int v, string &s) { if (czy[v]) { s.push_back('P'); } vector<pair<int, int>> g; for (int i = 0; i < 26; i++) { if (tr[v][i] != -1) { g.push_back({m[tr[v][i]], i}); } } sort(g.begin(), g.end()); for (auto i : g) { s.push_back('a'+i.second); print(tr[v][i.second], s); s.push_back('-'); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for (int i = 0; i < n; i++) { string s; cin >> s; add(0, s, 0); } string s; print(0, s); while (s[s.size()-1] == '-') { s.pop_back(); } cout << s.size() << '\n'; for (char c : s) { 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...