Submission #1283553

#TimeUsernameProblemLanguageResultExecution timeMemory
1283553catsarecool5530Type Printer (IOI08_printer)C++20
100 / 100
246 ms92648 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define endl "\n";
#define all(x) x.begin(), x.end()
#define int long long
const int MOD = 1e9 + 7;
const ll INF = 1e18;
 
const int MAXLEN = 25*25000;

int trie[MAXLEN][26];
bool finish[MAXLEN];
int nodeCount;
vector<char> ans;

void insert(string& s) {
    int curNode = 0;
    for (char c : s) {
        if (trie[curNode][c-'a'] == 0) {
            trie[curNode][c-'a'] = ++nodeCount;
        }
        curNode = trie[curNode][c-'a'];
    }
    finish[curNode] = true;
}
int maxDepth(int node) {
    int d = 0;
    for (int i = 0; i < 26; i++) {
        if (trie[node][i] != 0) {
            d = max(d, 1 + maxDepth(trie[node][i]));
        }
    }
    return d;
}
void traverse(int node) {
    if (finish[node]) {
        ans.push_back('P');
    }
    int maxD = 0;
    int maxDIndex = -1;
    for (int i = 0; i < 26; i++) {
        if (trie[node][i] == 0) continue;
        int d = maxDepth(trie[node][i]);
        if (d > maxD) {
            maxD = d;
            maxDIndex = i;
        }
    }
    for (int i = 0; i < 26; i++) {
        if (trie[node][i] == 0 || i == maxDIndex) continue;
        ans.push_back((char) (i + 'a'));
        traverse(trie[node][i]);
    }
    if (maxDIndex != -1) {
        ans.push_back((char) ('a' + maxDIndex));
        traverse(trie[node][maxDIndex]);
    }
    ans.push_back('-');
}

void solve() {
    int n; cin >> n;
    nodeCount = 0;
    for (int i = 0; i < n; i++) {
        string s; cin >> s;
        insert(s);
    }
    traverse(0);
    while (ans.back() == '-') {
        ans.pop_back();
    }
    cout << ans.size() << endl;
    for (char c : ans) {
        cout << c << endl;
    }
}
 
signed main() {
    ios::sync_with_stdio(0); cin.tie(NULL);
    // freopen("island.in", "r", stdin);
    // freopen("ans.out", "w", stdout);
    ll t = 1; //cin >> t;
    while (t--) {
        solve();
    }
}
#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...