Submission #1213989

#TimeUsernameProblemLanguageResultExecution timeMemory
1213989leandroioileleType Printer (IOI08_printer)C++20
30 / 100
55 ms27868 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define faster ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define NMAX 25005
#define pb push_back 
#define fi first 
#define se second 
int n;

struct gamb{
    int tam;
    char c;
};

struct node{
    map<char,int>next;
    int id;
    int tam;
    char c;
    node(){
        id=-1;
        next.clear();
        tam=0;
    }
};

vector<node>v;
string resp;
int espaco=0;

int new_node(){
    v.pb(node());
    return v.size()-1;
}

void dfs(int x){
    for(auto it:v[x].next){
        dfs(v[x].next[it.fi]);
        v[x].tam+=(v[v[x].next[it.fi]].tam+1);
        
    }
    if(v[x].id==1){
        v[x].tam=1;
    }
}

bool func(gamb a, gamb b){
    return a.tam<b.tam;
}

void solve(int x){
    vector<gamb>g;
    gamb aux2;
    if(x!=0){
        resp.pb(v[x].c);
        if(v[x].id==1){
        resp.pb('P');
        }
    }
    for(auto it:v[x].next){
        aux2.c=it.fi;
        aux2.tam=v[v[x].next[it.fi]].tam;
        g.pb(aux2);
    }
    if(g.size()>1)sort(g.begin(),g.end(),func);
    for(auto it:g){
        solve(v[x].next[it.c]);
        resp.pb('-');

    }
}
vector<string>s;

int32_t main(){
    cin>>n;
    int x;
    int inicio=new_node();
    for(int i=0; i<n; i++){
        s.pb("penis");
        cin>>s[i];
    }
    sort(s.begin(),s.end());
    for(int i=0; i<n; i++){
        x=inicio;
        for(auto it:s[i]){
            if(v[x].next.count(it)==0){
                v[x].next[it]=new_node();
            }
            x=v[x].next[it];
            v[x].c=it;
        }
        v[x].id=1;
    }
    dfs(inicio);
    solve(inicio);
    char aooo=resp.back();
    while(aooo=='-'){
        resp.pop_back();
        aooo=resp.back();
    }
    cout<<resp.size()<<"\n";
    for(auto it:resp)cout<<it<<"\n";
}
#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...