Submission #1184283

#TimeUsernameProblemLanguageResultExecution timeMemory
1184283rexdinoType Printer (IOI08_printer)C++20
100 / 100
231 ms69772 KiB
#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define sz(s) (int)s.size()
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define REP(i,a,b) for(int i=a;i>=b;--i)

using namespace std;

using ll = long long;
using pii = pair<int, int>;

const int N = 5e5 + 5;
const int mod = 1e9 + 7;
const int base = 31;
const ll INF = 1e18;

/// CODE ///
int n;
string s[N];
vector<char> V;
int dem = 0;

void print(){
    cout << V.size() << "\n";
    for (char c : V) cout << c << "\n";
    exit(0);
}


int cnt = 0;
int node[N][27];
int fin[N], h[N];

void Add(string s){
    int id = 0;
    FOR(i, 0, s.size()-1){
        int k = s[i] - 'a';
        if (node[id][k] == 0) node[id][k] = ++cnt;
        id = node[id][k];
    }
    h[id] = 0;
    fin[id]++;
}

void dfs(int id){
    if (fin[id]){
        V.pb('P');
        if (++dem == n) print();
    }

    FOR(i, 0, 20){
        FOR(j, 0, 25){
            if (node[id][j] != 0 && h[node[id][j]] == i){
                char c = j + 'a';
                V.pb(c);
                dfs(node[id][j]);
            }
        }
    }

    V.pb('-');
}

void input(){
    cin >> n;
    FOR(i, 1, n){
        cin >> s[i];
        Add(s[i]);
    }

    REP(id, cnt, 0){
        FOR(j, 0, 25){
            if (node[id][j] != 0){
                h[id] = max(h[id], h[node[id][j]] + 1);
            }
        }
    }

    dfs(0);
}

signed main(){
    #define NAME "main"
    if (fopen(NAME".inp", "r")){
        freopen(NAME".inp", "r", stdin);
        freopen(NAME".out", "w", stdout);
    }
    ios_base::sync_with_stdio(false); cin.tie(nullptr);

    input();


    return 0;
}

Compilation message (stderr)

printer.cpp: In function 'int main()':
printer.cpp:87:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   87 |         freopen(NAME".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
printer.cpp:88:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   88 |         freopen(NAME".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...