Submission #1105392

#TimeUsernameProblemLanguageResultExecution timeMemory
1105392SwainTimeType Printer (IOI08_printer)C++14
100 / 100
186 ms106436 KiB
#include<bits/stdc++.h>

using namespace std;

vector<char> v;

struct trie
{
    int dep, rasp;
    trie *fii[27];
};
trie* init = new trie();

void add(trie *t, char *c)
{
    if(*c == '\0')
    {
        t -> rasp++;
        return;
    }
    if(t -> fii[*c - 'a'] == NULL)
        t -> fii[*c - 'a'] = new trie();
    add(t -> fii[*c - 'a'], c + 1);
}

void ans(trie *t)
{
    for(int i = 1; i <= t -> rasp; i++)
        v.push_back('P');
    vector<pair<int, int>> ord;
    for(int i = 0; i < 26; i++)
    {
        if(t -> fii[i] != NULL)
        {
            ord.push_back({t -> fii[i] -> dep, i});
        }
    }
    
    sort(ord.begin(), ord.end());

    for(auto u : ord)
    {
        v.push_back(char(u.second + 'a'));
        ans(t -> fii[u.second]);
    }

    v.push_back('-');
}

void dfs_dep(trie *t)
{
    t -> dep = 1;
    for(int i = 0; i < 26; i++)
    {
        if(t -> fii[i] != NULL)
        {
            dfs_dep(t -> fii[i]);
            t -> dep = max(t -> dep, (t -> fii[i] -> dep) + 1);
        }
    }
}

int main()
{
    //freopen("trie.in", "r", stdin);
    //freopen("trie.out", "w", stdout);

    int n;
    char y[27];
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> y;
        add(init, y);
    }

    for(int i = 0; i < 26; i++)
        if(init -> fii[i] != NULL)
            dfs_dep(init -> fii[i]);
    ans(init);
    
    while(v.back() == '-')
        v.pop_back();
    cout << v.size() << "\n";
    for(auto u : v)
        cout << u << "\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...