Submission #788154

#TimeUsernameProblemLanguageResultExecution timeMemory
788154vjudge1Type Printer (IOI08_printer)C++17
100 / 100
149 ms79468 KiB
#include<bits/stdc++.h>
using namespace std;

const int N = 5e5 + 5;
const int D = 26;

int trie[N][D];
int node = 1;
bool fin[N];
bool vis[N];
vector<char> ans;

int great;
int low[N];
priority_queue<tuple<int, int, char>> G[N];

void add(string s){
    int cur = 0;
    for(char ch : s){
        int c = ch - 'a';
        if(!trie[cur][c]){
            trie[cur][c] = node;
            node++;
        }
        cur = trie[cur][c];
    }
    fin[cur] = 1;
}

void produndidad(int cur){
    if(fin[cur]) ans.push_back('P');
    
    while(!G[cur].empty()){
        int hijo;
        char c;
        tie(great, hijo, c) = G[cur].top();
        G[cur].pop();

        ans.push_back(c);
        produndidad(hijo);
        ans.push_back('-');
    }
}

void dfs(int cur, int he){
    vis[cur] = 1;
    low[cur] = he;
    for(int c = 0; c < 26; c++){
        if(trie[cur][c] and !vis[trie[cur][c]]){
            dfs(trie[cur][c], he+1);
            int child = trie[cur][c];
            G[cur].push({-low[child], child, c+'a'});
            low[cur] = max(low[cur], low[child]);
        }
    }
}
int main(){
    int n;
    cin >> n;
    for(int i = 0; i < n; i++){
        string s;
        cin >> s;
        add(s);
    }
    dfs(0, 0);
    produndidad(0);
    cout << ans.size() + great << "\n";
    for(int i = 0; i < (int)ans.size() + great; i++){
        cout << ans[i] << "\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...