Submission #1313837

#TimeUsernameProblemLanguageResultExecution timeMemory
1313837algoproclubType Printer (IOI08_printer)C++20
10 / 100
1 ms1080 KiB
// UUID: a0c452bb-5eff-4086-b645-98923e6819e4
#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> trie(250*20+1, vector<int>(26, -1));
vector<bool> iswordend(250*20+1, false);
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'];
        if (i == s.size()-1) iswordend[node]=true;
    }
}

void dfs(int node){
    if (iswordend[node]) ops.push_back('P');
    for(int i = 0; i < 26; i++){
        if (trie[node][i] != -1){
            ops.push_back((char)i+'a');
            dfs(trie[node][i]);
        }
    }
    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...