Submission #1195126

#TimeUsernameProblemLanguageResultExecution timeMemory
1195126KindaGoodGamesType Printer (IOI08_printer)C++20
100 / 100
153 ms69104 KiB
#include<bits/stdc++.h>

#define ll long long
#define pii pair<int,int>
#define tiii tuple<int,int,int>

using namespace std;

struct TrieNode{
    bool marked;
    int depth = 0;
    int height = 0;
    vector<int> child;
    TrieNode(){
        child.resize(26, -1);
        marked = false;
    }
};

vector<TrieNode> trie;
int cnt = 0;
string res = "";

void insert(string& s, int i = 0, int ind = 0){
    if(i == s.size()){
        trie[ind].marked = true;
        return;
    }

    int c = trie[ind].child[s[i]-'a'];
    if(c == -1){
        trie[ind].child[s[i]-'a'] = trie.size();
        trie.push_back(TrieNode());
        c = trie[ind].child[s[i]-'a'];
        trie[c].depth = trie[ind].depth+1; 
    } 

    insert(s,i+1,c);
    trie[ind].height = max(trie[c].height+1, trie[ind].height);
}

void add(char c){
    res += c; 
    cnt++;
}
void trav(int ind = 0){  
    if(trie[ind].marked){
        add('P'); 
    }
    vector<tiii> choices;
    for(int i = 0; i < 26; i++){
        int c = trie[ind].child[i];
        if(c == -1){
            continue;
        }
        choices.push_back({trie[c].height, c, i});
    }

    sort(choices.begin(),choices.end());
    for(auto p : choices){
        int h,c,i;
        tie(h,c,i) = p;
        add('a'+i);
        trav(c);
        add('-');
    }
}
int main(){
    trie.push_back(TrieNode());

    int n;
    cin >> n;

    for(int i = 0; i < n; i++){
        string s;
        cin >> s;
        insert(s);
    }

    trav(0);

    while(res.back() == '-'){
        res.pop_back();
        cnt--;
    }
    cout << cnt <<endl;
    for(int i = 0; i < res.size(); i++){
        cout << res[i] << "\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...