제출 #1224331

#제출 시각아이디문제언어결과실행 시간메모리
1224331MuhammetType Printer (IOI08_printer)C++20
100 / 100
75 ms51132 KiB
#include "bits/stdc++.h"

using namespace std;

#define ll long long
#define SZ(s) (int)s.size()
#define ff first
#define ss second

const int N = (3e4 + 5);
const int M = 1e9 + 7;

int v[N * 26][26], T, cnt[N * 26], sz[N * 26];

string s;

vector <char> ans; 

void upd(int nd, int ind) {
    if(ind == SZ(s)) {
        cnt[nd]++;
        sz[nd] = max(sz[nd], SZ(s));
        return;
    }
    int t = (s[ind] - 'a');
    if(!v[nd][t]) v[nd][t] = ++T;
    upd(v[nd][t], ind+1);
    sz[nd] = max(sz[nd], sz[v[nd][t]]);
}

void fnd(int nd) {
    for(int i = 0; i < cnt[nd]; i++) {
        ans.push_back('P');
    }
    int mx = 0, x = -1, c;
    for(int i = 0; i < 26; i++) {
        if(v[nd][i]) {
            if(sz[v[nd][i]] > mx) {
                if(~x) {
                    ans.push_back(char('a' + c));
                    fnd(x);
                }
                mx = sz[v[nd][i]];
                x = v[nd][i];
                c = i;
            }
            else {
                ans.push_back(char('a' + i));
                fnd(v[nd][i]);
            }
        }
    }
    if(~x) {
        ans.push_back(char('a' + c));
        fnd(x);
    }
    ans.push_back('-');
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr);

    int n;
    cin >> n;
    while(n--) {
        cin >> s;
        upd(0, 0);
    }

    fnd(0);

    while(SZ(ans) and ans.back() == '-')
        ans.pop_back();

    cout << SZ(ans) << "\n";
    for(auto i : ans) {
        cout << i << "\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...