Submission #632869

# Submission time Handle Problem Language Result Execution time Memory
632869 2022-08-21T04:16:31 Z van_hoang Type Printer (IOI08_printer) C++17
30 / 100
172 ms 213988 KB
#include "bits/stdc++.h"

using namespace std;

#ifndef LOCAL
#define debug(...) 86
#endif

const int maxN = 1e6 + 5;
const int maxC = 26;

struct node {
    int end;
    node *child[maxC];

    node() {
        end = 0;
        for (int i = 0; i < maxC; ++i) child[i] = NULL;
    }
};

int nxt;
node nodes[maxN];

node *newnode() {
    return &nodes[nxt++];
}

vector<char> res;
struct trie {
    node *root;

    trie() {
        root = newnode();
    }

    void insert(node *n, string &s, int pos) {
        if (pos == (int)s.size()) {
            n->end = 1;
            return;
        }
        if (!n->child[s[pos] - 'a']) {
            n->child[s[pos] - 'a'] = newnode();
        }
        insert(n->child[s[pos] - 'a'], s, pos + 1);
    }

    void solve(node *n) {
        if (n->end) {
            res.emplace_back('P');
        }
        for (int i = 0; i < maxC; ++i) {
            if (!n->child[i]) continue;
            res.emplace_back(char(i + 'a'));
            solve(n->child[i]);
            res.emplace_back('-');
        }
    }
};

trie T;
int N;

int main() {
    ios::sync_with_stdio(0), cin.tie(0);
    
    cin >> N;

    for (int i = 0; i < N; ++i) {
        string s; cin >> s;
        T.insert(T.root, s, 0);
    }

    T.solve(T.root);

    int mx = 0, cnt = 0, pos;
    for (int i = 0; i < (int)res.size(); ++i) {
        if (res[i] == '-') {
            ++cnt;
            if (mx < cnt) {
                mx = cnt;
                pos = i;
            }
        }
        else cnt = 0;
    }

    int j = pos - mx;
    cnt = 0;
    while (j >= 0) {
        if (res[j] == 'P') {
        }
        else if (res[j] == '-') {
            --cnt;
        }
        else {
            ++cnt;
            if (cnt == mx) {
                break;
            }
        }
        --j;
    }
    for (int i = j; i <= pos - mx; ++i) {
        res.emplace_back(res[i]);
    }
    cout << (int)res.size() - (pos - j + 1) << '\n';
    for (int i = 0; i < (int)res.size(); ++i) {
        if (i >= j && i <= pos) continue;
        cout << res[i] << '\n';
    }
}

Compilation message

printer.cpp: In function 'int main()':
printer.cpp:109:25: warning: 'pos' may be used uninitialized in this function [-Wmaybe-uninitialized]
  109 |         if (i >= j && i <= pos) continue;
      |                       ~~^~~~~~
# Verdict Execution time Memory Grader output
1 Correct 86 ms 211608 KB Output is correct
2 Correct 91 ms 211636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 88 ms 211536 KB Output is correct
2 Correct 88 ms 211572 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 96 ms 211644 KB Output is correct
2 Incorrect 87 ms 211536 KB printed invalid word
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 88 ms 211556 KB Output is correct
2 Correct 98 ms 211604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 104 ms 211532 KB printed invalid word
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 92 ms 211616 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 106 ms 211864 KB Output is correct
2 Incorrect 103 ms 212100 KB printed invalid word
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 103 ms 212092 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 135 ms 212860 KB Output is correct
2 Correct 172 ms 213988 KB Output is correct
3 Incorrect 154 ms 213032 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 125 ms 212556 KB Output isn't correct
2 Halted 0 ms 0 KB -