제출 #1275470

#제출 시각아이디문제언어결과실행 시간메모리
1275470papauloType Printer (IOI08_printer)C++20
100 / 100
102 ms59868 KiB
#include <bits/stdc++.h>
using namespace std;

#define MAXI 500500

vector<char> ans;
int trie[MAXI][26];
int has[MAXI];
int len[MAXI];
int mlen[MAXI];
int id=0;

void insert(string s) {
    int n=0;
    for(char c : s) {
        int &t=trie[n][c-'a'];
        if(!t) {
            t=++id;
        }
        len[t]=len[n]+1;
        n=t;
    }
    has[n]=1;
}

void dfs1(int v) {
    mlen[v]=len[v];
    for(int i=0;i<26;i++) {
        int u=trie[v][i];
        if(!u) continue;
        dfs1(u);
        mlen[v]=max(mlen[v], mlen[u]);
    }
}

void dfs2(int v) {
    if(has[v]) ans.push_back('P');
    for(int i=0;i<26;i++) {
        int u=trie[v][i];
        if(!u||mlen[u]==mlen[v]) continue;
        ans.push_back('a'+i);
        dfs2(u);
        ans.push_back('-');
    }
    for(int i=0;i<26;i++) {
        int u=trie[v][i];
        if(!u||mlen[u]<mlen[v]) continue;
        ans.push_back('a'+i);
        dfs2(u);
        ans.push_back('-');
    }
}

int main() {
    memset(trie, 0, sizeof(trie));
    memset(has, 0, sizeof(has));
    memset(len, 0, sizeof(len));
    memset(mlen, 0, sizeof(mlen));
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    while(n--) {
        string s;
        cin >> s;
        insert(s);
    }
    dfs1(0);
    dfs2(0);
    for(int i=0;i<mlen[0];i++) ans.pop_back();
    cout << ans.size() << endl;
    for(char c : ans) cout << c << "\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...