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