Submission #1313876

#TimeUsernameProblemLanguageResultExecution timeMemory
1313876algoproclubType Printer (IOI08_printer)C++20
20 / 100
40 ms67340 KiB
// UUID: c09e3acc-d450-4cfc-8a35-e0d8a01c8a8a
#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> trie(25000*20+1, vector<int>(26, -1));
vector<bool> iswordend(25000*20+1, false);
vector<int> cnt(250*20+1, 0);
int nodes = 0;
vector<char> ops;

void insert(const string s){
    int node = 0;
    for(int i = 0; i < s.size(); i++) {
        if (trie[node][s[i] - 'a'] == -1) trie[node][s[i] - 'a'] = ++nodes;
        node = trie[node][s[i] - 'a'];
        cnt[node]++;
        if (i == s.size()-1) iswordend[node]=true;
    }
}

void dfs(int node){
    if (iswordend[node]) ops.push_back('P');
    vector<pair<int, int>> curr; //longest, char's val
    
    for(int i = 0; i < 26; i++) {
        if (trie[node][i] != -1) curr.push_back({cnt[trie[node][i]], i});
    }

    sort(curr.begin(), curr.end());
    
    for(auto i : curr){
        ops.push_back((char) i.second + 'a');
        dfs(trie[node][i.second]);
    }
    ops.push_back('-');
}

void solve() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++){
        string s;
        cin >> s;
        insert(s);
    }
    dfs(0);
    for (int i = ops.size()-1; i >= 0; i--){
        if (ops[i] != '-') break;
        ops.pop_back();
    }
    cout << ops.size() << "\n";
    for (char c : ops) cout << c << "\n";
    return;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t = 1;
    //cin >> t;
    while (t--) {
        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...