Submission #1254286

#TimeUsernameProblemLanguageResultExecution timeMemory
1254286luis_aqmType Printer (IOI08_printer)C++20
100 / 100
105 ms58844 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define tt tuple<int,int,int>
#define NMAX 100005
#define MOD 1000000007
#define faster ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

struct node {
    map<int, int> next;
    int id;
    bool marc;
    
    node(){
        id = -1;
        next.clear();
        marc = 0;
    }
};

vector<node> tri = {node()};
string resp;

int new_node() {
    tri.push_back(node());
    return tri.size()-1;
}

void insere(string &s, int i) {
    int k = 0;

    for(auto c : s) {
        if(!tri[k].next.count(c)) {
            tri[k].next[c] = new_node();
        }
        k = tri[k].next[c];
    }
    tri[k].id = i;
}

void DFS(int x) {
    if(tri[x].id != -1) 
        resp.push_back('P');

    char c;
    int y = 0;
    for(auto [d, it] : tri[x].next) {
        if(tri[it].marc) {
            y = it;
            c = d;
            continue;
        }

        resp.push_back(d);
        DFS(it);
        resp.push_back('-');
    }

    if(y) {
        resp.push_back(c);
        DFS(y);
    }
}

int32_t main() { faster
    int n;
    cin>>n;

    string mx;
    for(int i = 1; i <= n; i++) {
        string s;
        cin>>s;

        insere(s, i);

        if(s.size() > mx.size()) {
            mx = s;
        }
    }

    int k = 0;
    for(auto c : mx) {
        k = tri[k].next[c];
        tri[k].marc = 1;
    }

    DFS(0);

    cout<<resp.size()<<"\n";
    for(auto c : resp)
        cout<<c<<"\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...