Submission #1158264

#TimeUsernameProblemLanguageResultExecution timeMemory
1158264AlgorithmWarriorType Printer (IOI08_printer)C++20
100 / 100
170 ms43944 KiB
#include <bits/stdc++.h>

using namespace std;

struct node
{
    vector<pair<int,node*>>child;
    int cuv;
    node* longest;
    int maxim;
    node(int nr)
    {
        longest=0;
        maxim=0;
        cuv=0;
    }
};
node *root=new node(0);
string rasp;

node* fp(node* nod,int nr)
{
    for(auto per : nod->child)
        if(per.first==nr)
            return per.second;
    return 0;
}

void adauga(string word,int ind,node* nod)
{
    if(word.size()>ind)
    {
        int urm=word[ind]-'a';
        if(!fp(nod,urm))
            nod->child.push_back({urm,new node(0)});
        adauga(word,ind+1,fp(nod,urm));
    }
    else
        if(word.size()==ind)
            ++nod->cuv;
}

void dfs0(node* nod)
{
    int i;
    for(i=0;i<26;++i)
        if(fp(nod,i))
        {
            dfs0(fp(nod,i));
            if(fp(nod,i)->maxim>nod->maxim)
            {
                nod->maxim=fp(nod,i)->maxim;
                nod->longest=fp(nod,i);
            }
        }
    ++nod->maxim;
}

void dfs(node* nod)
{
    while(nod->cuv--)
        rasp.push_back('P');
    if(nod->longest){
    int i;
    char lit;
    for(i=0;i<26;++i)
        if(fp(nod,i))
            if(fp(nod,i)==nod->longest)
                lit=i;
            else
            {
                rasp.push_back(i+'a');
                dfs(fp(nod,i));
            }
    rasp.push_back(lit+'a');
    dfs(nod->longest);}
    rasp.push_back('-');
}

int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        string s;
        cin>>s;
        adauga(s,0,root);
    }
    dfs0(root);
    dfs(root);
    while(rasp.back()=='-')
        rasp.pop_back();
    cout<<rasp.size()<<'\n';
    for(auto ch : rasp)
        cout<<ch<<'\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...