Submission #1178293

#TimeUsernameProblemLanguageResultExecution timeMemory
1178293giabao249Type Printer (IOI08_printer)C++20
100 / 100
496 ms126600 KiB
#include<bits/stdc++.h>
using namespace std;
#define el '\n'
const int N = 25005;
const int ALPHA_BET = 26;
const int inf = 2e9;
template<class T> bool ckmax(T& a, const T&b) {
    return a < b ? a = b, 1 : 0;
}
int n;
struct Node {
    Node*child[ALPHA_BET];
    int exits;
    Node() {
        for(int i = 0 ; i < ALPHA_BET ; i++) {
            child[i] = nullptr;
        }
        exits = 0;
    }
};
map<Node* , int> depth;

int cur = 0;
Node *root;
void addString(string s) {
    Node *p = root;
    for(char f : s) {
        int c = f - 'a';
        if(p->child[c] == nullptr) {
            p->child[c] = new Node();
        }
        p = p->child[c];
    }
    p->exits++;
}

void dfs(Node *p) {
    depth[p] = 1;
    for(int i = 0 ; i < ALPHA_BET ; i++){
        if(p->child[i]){
            dfs(p->child[i]);
            ckmax(depth[p] , depth[p->child[i]] + 1);
//            cout << depth[p] << ' ' << char(i + 'a') << el;
        }
    }
}
string ret;
void solve(Node *p) {
    if(p->exits > 0){
        ret += 'P';
    }
    for(int i = 0 ; i < ALPHA_BET ; i++){
        if(p->child[i] && depth[p] > depth[p->child[i]] + 1){
            ret += (char)(i + 'a');
            solve(p->child[i]);
//            cout << 1 << ' ' << ret << el;
        }
    }
    for(int i = 0 ; i < ALPHA_BET ; i++){
        if(p->child[i] && depth[p] == depth[p->child[i]] + 1){
            ret += (char)(i + 'a');
            solve(p->child[i]);
//            cout << 2 << ' ' << char(i + 'a') << el;
        }
    }
    ret += '-';
}
void GOTO_OLP2025() {
    root = new Node();
    cin >> n;
    for(int i = 0 ; i < n ; i++) {
        string s ;
        cin >> s;
        addString(s);
    }
    dfs(root);
    solve(root);
    for(int i = ret.size() - 1 ; i >= 0 ; i--){
        if(ret[i] == '-') ret.pop_back();
        else break;
    }
    cout << ret.size() << el;
    for(char c : ret) cout << c << el;
}

int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0) , cout.tie(0);
//    freopen("Task.in", "r", stdin);
    GOTO_OLP2025();
}
#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...