Submission #1313831

#TimeUsernameProblemLanguageResultExecution timeMemory
1313831zuzuType Printer (IOI08_printer)C++20
30 / 100
74 ms53920 KiB
#include <bits/stdc++.h>
using namespace std;

struct Node
{
    int nxt[26];
    Node(){
        fill(nxt, nxt+26, -1);
    }
};

vector <bool> ending(5e5 + 5, false);
vector <Node> trie(1);

void Insert(string s)
{
    int u = 0;
    for(auto x : s){
        int c = x - 'a';
        if(trie[u].nxt[c] == -1){
            trie[u].nxt[c] = trie.size();
            Node newnode;
            trie.push_back(newnode);
        }
        u = trie[u].nxt[c];
    }
    ending[u] = true;
}

vector <string> ans(26);

void dfs(int u, int r)
{
    if(ending[u]) ans[r] += 'P';
    for(int i = 0; i < 26; i++){
        if(trie[u].nxt[i] != -1){
            ans[r] += i + 'a';
            dfs(trie[u].nxt[i],r);
        }
    }
    ans[r] += '-';
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n; cin >> n;
    for(int i = 0; i < n; i++){
        string s; cin >> s;
        Insert(s);
    }
    vector <int> cnt(26);
    for(int i = 0; i < 26; i++){
        if(trie[0].nxt[i] != -1){
            ans[i].push_back(i + 'a');
            dfs(trie[0].nxt[i], i);
            for(int j = ans[i].size()-1; j >= 0; j--){
                if(ans[i][j] != '-'){
                    cnt[i] = ans[i].size()-j-1;
                    break;
                }
            }
        }
    }
    
    int longest = 0;
    int sum = 0;
    for(int i = 0; i < 26; i++){
        sum += ans[i].size();
        if(cnt[longest] < cnt[i]) longest = i;
    }
    cout << sum-cnt[longest]<<"\n";
    for(int i = 0; i < 26; i++){
        if(i == longest) continue;
        for(int j = 0; j < ans[i].size(); j++) cout << ans[i][j] << "\n";
    }
    for(int i = 0; i < ans[longest].size() - cnt[longest]; i++){
        cout << ans[longest][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...