Submission #1260452

#TimeUsernameProblemLanguageResultExecution timeMemory
1260452kargneqType Printer (IOI08_printer)C++20
100 / 100
34 ms4936 KiB
#include <bits/stdc++.h> using namespace std; static int lcp(const string& a, const string& b) { int k = 0, m = min(a.size(), b.size()); while (k < m && a[k] == b[k]) ++k; return k; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; if (!(cin >> n)) return 0; vector<string> a(n); for (int i = 0; i < n; ++i) cin >> a[i]; // choose one deepest word W to end on string W = *max_element(a.begin(), a.end(), [](const string& x, const string& y){ return x.size() < y.size(); }); // sort by increasing LCP with W, then lexicographic sort(a.begin(), a.end(), [&](const string& x, const string& y){ int lx = lcp(x, W), ly = lcp(y, W); if (lx != ly) return lx < ly; return x < y; }); string cur; vector<char> ops; ops.reserve(1000000); for (const string& s : a) { int k = lcp(cur, s); while ((int)cur.size() > k) { cur.pop_back(); ops.push_back('-'); } while ((int)cur.size() < (int)s.size()) { char c = s[cur.size()]; cur.push_back(c); ops.push_back(c); } ops.push_back('P'); } cout << ops.size() << '\n'; for (char c : ops) 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...