Submission #1214042

#TimeUsernameProblemLanguageResultExecution timeMemory
1214042leandroioileleType Printer (IOI08_printer)C++20
0 / 100
88 ms38840 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 all(x) x.begin(),x.end()
#define pb push_back
#define fi first 
#define se second
#define pic pair<int,char>
#define INF 9999999999
#define pis pair<int,string>
#define piic pair<int,pair<int,char>>

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

vector<node>v;
vector<pis>s;
int inicio;
string resp;

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

void dfs(int x){
    int filho;
    for(auto it:v[x].next){
        filho=v[x].next[it.fi];
        dfs(filho);
        v[x].tam+=v[filho].tam;
    }
    //cout<<v[x].c<<" "<<x<<" "<<v[x].tam<<"\n";
}

void solve(int x){
    vector<piic>gamb;
    int filho;
    for(auto it:v[x].next){
        filho=v[x].next[it.fi];
        gamb.pb({it.se,{v[filho].tam, it.fi}});
    }
    if(gamb.size()>1)sort(all(gamb));
    for(auto it:gamb){
        resp.pb(it.se.se);
        if(v[it.fi].id==1)resp.pb('P');
        solve(it.fi);
        resp.pb('-');
    }
}

int32_t main(){
    int n;
    cin>>n;
    s.resize(n);
    string maior;
    for(int i=0; i<n; i++){
        cin>>s[i].se;
        if(s[i].se.size()>maior.size()){
            maior=s[i].se;
        }
    }
    int igual;
    for(int i=0; i<n; i++){
        igual=0;
        for(int j=0; j<min(maior.size(),s[i].se.size()); j++){
            if(maior[j]==s[i].se[j]){
                igual++;
            }
            else break;
        }
        s[i].fi=igual;
    }
    sort(all(s));
    inicio=new_node();
    int x;
    for(int i=0; i<n; i++){
        x=inicio;
        for(auto it:s[i].se){
            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 aux=resp.back();
    while(aux=='-'){
        resp.pop_back();
        aux=resp.back();
    }
    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...