Submission #1276097

#TimeUsernameProblemLanguageResultExecution timeMemory
1276097nanaseyuzukiType Printer (IOI08_printer)C++20
100 / 100
90 ms82020 KiB
#include <bits/stdc++.h>
// Author: Kazuki_Will_Win_VOI_8703
#define fi first
#define se second
#define pii pair<int, int>
#define all(a) a.begin(), a.end()
using namespace std;

const int mn = 1e6 + 5, mod = 998244353;

int n, ans[mn], ed[mn], on[mn], child[mn][26], cnt = 0, Yuzuki = 0;
string res;
string s[mn];
vector <int> pos[mn];

void add(string a, int id){
    int u = 0;
    for(auto c : a){
        int v = c - 'a';
        if(!child[u][v]) child[u][v] = ++cnt;
        u = child[u][v];
    }
    ed[u] ++;
}

void go(string a){
    int u = 0;
    for(auto c : a){
        int v = c - 'a';
        u = child[u][v];
        on[u] = 1;
    }
}

void dfs(int u, int del){
    for(int i = 1; i <= ed[u]; i++) res += 'P';
    if(del){
        int id = 0, num = 0;
        for(int i = 0; i < 26; i++){
            int v = child[u][i];
            if(!v) continue;
            if(on[v]){ id = v; num = i; continue; }
            res += char(97 + i);
            dfs(v, 0);
            res += '-';
        }
        if(id > 0){
            res += char(97 + num);
            dfs(id, 1);
        }
    }
    else{
        for(int i = 0; i < 26; i++){
            int v = child[u][i];
            if(!v) continue;
            res += char(97 + i);
            dfs(v, 0);
            res += '-';
        }
    }
}

void solve(){
    cin >> n;
    int max_val = 0, id = 0;
    for(int i = 1; i <= n; i++){
        cin >> s[i];
        add(s[i], i);
        if(s[i].size() > s[id].size()) id = i;
    }
    go(s[id]);
    dfs(0, 1);
    cout << res.size() << '\n';
    for(auto c : res) cout << c << '\n';
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int 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...