Submission #1294627

#TimeUsernameProblemLanguageResultExecution timeMemory
1294627nathlol2Type Printer (IOI08_printer)C++20
100 / 100
89 ms99184 KiB
#include <bits/stdc++.h>
using namespace std;
int n; string st;
vector<char> ans;
struct trie{
    struct node{
        int mx, ed;
        node *c[26];
        node(){
            mx = 0; ed = 0;
            for(int i = 0;i<26;i++) c[i] = 0;
        }
    };
    typedef node* pnode;
    pnode rt = 0;
    void upd(pnode &k, string &s, int idx, int sz){
        if(!k) k = new node();
        if(idx == sz) return k->ed = 1, k->mx = max(k->mx, sz), void();
        upd(k->c[s[idx] - 'a'], s, idx + 1, sz);
        k->mx = max(k->mx, k->c[s[idx] - 'a']->mx);
    }
    void dfs(pnode k){
        if(k->ed) ans.push_back('P');
        pair<int, int> hv = {-1, -1};
        for(int i = 0;i<26;i++){
            if(!k->c[i]) continue;
            hv = max(hv, {k->c[i]->mx, i});
        }
        if(hv.second == -1) return ans.push_back('-'), void();
        for(int i = 0;i<26;i++){
            if(!k->c[i] || i == hv.second) continue;
            //cout << k->mx << '\n';
            ans.push_back(i + 'a');
            dfs(k->c[i]);
        }
        ans.push_back(hv.second + 'a');
        dfs(k->c[hv.second]);
        ans.push_back('-');
    }
}t;
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n;
    for(int i = 0;i<n;i++){
        cin >> st;
        t.upd(t.rt, st, 0, st.size());
    }
    t.dfs(t.rt);
    for(int i = 0;i<=t.rt->mx;i++) ans.pop_back();
    cout << ans.size() << '\n';
    for(auto x : ans) cout << x << '\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...