Submission #1256144

#TimeUsernameProblemLanguageResultExecution timeMemory
1256144minhpkType Printer (IOI08_printer)C++20
100 / 100
88 ms52924 KiB
#include <bits/stdc++.h>

using namespace std;
int child[2000005][26];
int isend[2000005];
int cnt=0;
int par[2000005];
int low[2000005];
vector <char> v;

void rev(int k){
    int pre=1;
    while (k>0){
         low[k]=max(low[k],pre);
         k=par[k];
         pre++;
    }
}

void add(string s){
    int k=0;
    for (auto c:s){
        if (child[k][c-'a']==0){
            cnt++;
            child[k][c-'a']=cnt;
            par[cnt]=k;
        }
        k=child[k][c-'a'];
    }
    isend[k]++;
    rev(k);
}


void get(int k){
    for (int i=1;i<=isend[k];i++){
         v.push_back('P');
    }
    int trace=-1,max1=0;
    for (int i=0;i<=25;i++){
         if (child[k][i]){
             if (max1<low[child[k][i]]){
                 max1=low[child[k][i]];
                 trace=i;
             }
         }
    }
    for (int i=0;i<=25;i++){
         if (child[k][i] && i!=trace){
             v.push_back(char(i+'a'));
             get(child[k][i]);
             v.push_back('-');
         }
    }

    if (trace!=-1){
        v.push_back(char(trace+'a'));
        get(child[k][trace]);
        v.push_back('-');
    }
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int a;
    cin >> a;
    for (int i=1;i<=a;i++){
         string s;
         cin >> s;
         add(s);
    }

    get(0);
    while (v.back()=='-'){
          v.pop_back();
    }
    cout << v.size() << "\n";
    for (auto c:v){
        cout << c<<"\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...