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...