Submission #1132702

#TimeUsernameProblemLanguageResultExecution timeMemory
1132702DangKhoizzzzType Printer (IOI08_printer)C++20
100 / 100
272 ms76664 KiB
#include <bits/stdc++.h>
#define pii pair <int , int>
#define fi first
#define se second
#include <cstdint>

using namespace std;

const int maxn = 5e5 + 7;
const int mod = 1e9 + 7;

struct node
{
    int cnt , child[26];
    node(){
        cnt = 0;
        for(int i = 0; i < 26; i++) child[i] = -1;
    }
};

vector <node> trie;
vector <int> g[maxn];

int maxdep[maxn];

char val[maxn];

int ans = 0;

void ADD(string s)
{
    int cur = 0;
    maxdep[0] = max(maxdep[0] , (int)s.size() + 1);
    for(char ch: s)
    {
        int c = ch - 'a';
        if(trie[cur].child[c] == -1)
        {
            trie[cur].child[c] = (int)trie.size();
            g[cur].push_back((int)trie.size());
            trie.push_back(node());
            ans++;
        }
        cur = trie[cur].child[c];
        maxdep[cur] = max(maxdep[cur] , (int)s.size()+1);
        val[cur] = ch;
    }
    trie[cur].cnt++;
}

int remain;

void dfs(int u)
{
    if(u != 0) cout << val[u] << '\n';

    while(trie[u].cnt > 0 && u != 0)
    {
        cout << 'P' << '\n';
        trie[u].cnt--;
        remain--;
    }

    vector <pii> order;

    for(int i = 0; i < 26; i++)
    {
        order.push_back({maxdep[trie[u].child[i]] , trie[u].child[i]});
    }
    sort(order.begin() , order.end());
    
    for(pii tmp: order)
    {
        int v = tmp.se;
        if(v == -1) continue;
        dfs(v);
    }

    if(remain > 0) cout << '-' << '\n';
}

int n;

void solve()
{
    cin >> n; remain = n;
    trie.push_back(node());
    for(int i = 1; i <= n; i++)
    {
        string ss; cin >> ss; ADD(ss); //cout << ans << '\n';
    }
    cout << ans*2 - (maxdep[0] - 1)  + n  << '\n';
    dfs(0);
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    solve();
    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...