Submission #1365223

#TimeUsernameProblemLanguageResultExecution timeMemory
1365223shrimbType Printer (IOI08_printer)C++20
100 / 100
115 ms105960 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

struct node{
    node *adj[26];
    int dep, maxdep, newend;
    
    node()
    {
        for(int i = 0; i < 26; i++)
        {
            adj[i]=0;
        } maxdep=dep=0;
    }
};

node *root = new node;

void insert(string s)
{
    node *cur = root;
    for(auto c : s)
    {
        if(!cur -> adj[c-'a']) 
        {
            cur->adj[c-'a'] = new node;
        }
        cur = cur->adj[c-'a'];
    }
    cur->newend++;
}

void dfs1(node *cur)
{
    cur -> maxdep = cur -> dep;
    for(int i = 0; i < 26; i++)
    {
        if(cur -> adj[i])
        {
            cur->adj[i]->dep = cur->dep+1;
            dfs1(cur->adj[i]);
            cur->maxdep = max(cur->maxdep, cur->adj[i]->maxdep);
        }
    }
}
string ans;
void dfs2(node *cur)
{
    while(cur->newend--) ans+='P';
    int m = -1;
    for(int i =0 ; i < 26; i++)
    {
        if(cur->adj[i])
        {
            if(m==-1 || cur->adj[m]->maxdep < cur->adj[i]->maxdep) m = i;
        }
    }
    for(int i = 0; i < 26; i++)
    {
        if(cur->adj[i]&&i!=m)
        {
            ans+=i+'a';
            dfs2(cur->adj[i]);
            ans+='-';
        }
    }
    if(m!=-1)
    {
        ans+=m+'a';
        dfs2(cur->adj[m]);
        ans+='-';
    }
}

signed main()
{
    cin.tie(0)->sync_with_stdio(0);
    int n; cin>>n;
    for(int i = 0; i < n; i++) {
        string s; cin>>s; insert(s);
    }
    dfs1(root);    
    dfs2(root);
    while(ans.back()=='-') ans.pop_back();
    cout<<ans.size()<<"\n";
    for(auto c : ans) cout<<c<<"\n";
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...