5402 2023. 05. 12 15:58:58 szil Széfnyitás cpp14 Elfogadva 100/100 8ms 6420 KiB
#include <bits/stdc++.h>

using ll = long long;
using namespace std;
const ll INF = 1e18;

const int MAXN = 151;

int s[MAXN][2], s2[50001][2], a[MAXN], b[50001];
bool bits[MAXN];

int timer;
struct Node {
    Node *p[2] = {nullptr, nullptr};
    int u = -1, t;
};

Node *root;

void add(vector<int> &v, int u) {
    Node *ptr = root;
    for (int i : v) {
        if (ptr->p[i] == nullptr) {
            ptr->p[i] = new Node();
            ptr->p[i]->t = timer++;
        }
        ptr = ptr->p[i];
    }
    ptr->u = u;
}

void upd(Node *v, int d = 0) {
    b[v->t] = bits[d];
    if (v->u != -1) {
        s2[v->t][0] = s2[v->t][1] = v->u;
        return;
    }
    if (v->p[0] != nullptr) {
        s2[v->t][0] = v->p[0]->t;
        upd(v->p[0], d + 1);
    }
    if (v->p[1] != nullptr) {
        s2[v->t][1] = v->p[1]->t;
        upd(v->p[1], d + 1);
    }
}

int main()
{
    srand(time(0));
    ios::sync_with_stdio(0); cin.tie(0);
    int n, k; cin >> n;
    timer = n + 1;
    root = new Node();
    root->t = timer++;
    for (int i = 1; i <= n; i++) {
        int x;
        cin >> a[i] >> s[i][0] >> s[i][1];
    }
    cin >> k;
    for (int i = 0; i < n; i++) {
        bits[i] = rand() % 2;
    }

    if (n <= 2) {
        b[1] = 0;
        b[2] = 1;

        for (int i = 1; i <= 2; i++) {
            for (int j = 1; j <= 2; j++) {
                for (int c = 1; c <= 2; c++) {
                    for (int d = 1; d <= 2; d++) {
                        s2[1][0] = i;
                        s2[1][1] = j;
                        s2[2][0] = c;
                        s2[2][1] = d;
                        bool g = true;
                        for (int start = 1; start <= n && g; start++) {
                            int left = k;
                            int stB = 1;
                            int st = start;
                            for (int it = 0; it <= 10; it++) {
                                int o1 = a[st];
                                int o2 = b[stB];
                                if (o1 != o2) {
                                    if (left == 0) {
                                        g = false;
                                        break;
                                    }
                                    left--;
                                }
                                st = s[st][o2];
                                stB = s2[stB][o1];
                            }
                        }

                        if (g) {
                            cout << "2 1\n";
                            cout << b[1] << " " << s2[1][0] << " " << s2[1][1] << "\n" << b[2] << " " << s2[2][0] << " " << s2[2][1] << "\n";
                            exit(0);
                        }
                    }
                }
            }
        }
        exit(1);
    }

    for (int i = 1; i <= n; i++) {
        vector<int> v;
        int u = i;
        for (int it = 0; it < n-1; it++) {
            v.push_back(a[u]);
            u = s[u][bits[it]];
        }
        add(v, s[u][bits[n-1]]);
    }
    upd(root);
    cout << timer-1 << " " << n+1 << "\n";
    for (int i = 1; i <= n; i++) {
        cout << a[i] << " " << s[i][0] << " " << s[i][1] << "\n";
    }
    for (int i = n+1; i < timer; i++) {
        if (s2[i][0] == 0) s2[i][0] = s2[i][1];
        if (s2[i][1] == 0) s2[i][1] = s2[i][0];
        if (s2[i][0] == 0) {
            s2[i][0] = s2[i][1] = 1;
        }
        cout << b[i] << " " << s2[i][0] << " " << s2[i][1] << "\n";
    }
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1836 KiB
2 Elfogadva 3ms 2028 KiB
subtask2 16/16
3 Elfogadva 3ms 2028 KiB
4 Elfogadva 3ms 2240 KiB
5 Elfogadva 3ms 2448 KiB
6 Elfogadva 3ms 2664 KiB
7 Elfogadva 3ms 2880 KiB
8 Elfogadva 3ms 3092 KiB
9 Elfogadva 2ms 3172 KiB
10 Elfogadva 2ms 3172 KiB
11 Elfogadva 3ms 3384 KiB
12 Elfogadva 2ms 3384 KiB
13 Elfogadva 3ms 3516 KiB
14 Elfogadva 3ms 3596 KiB
subtask3 24/24
15 Elfogadva 3ms 3596 KiB
16 Elfogadva 3ms 3608 KiB
17 Elfogadva 3ms 3884 KiB
18 Elfogadva 3ms 4188 KiB
19 Elfogadva 3ms 4308 KiB
20 Elfogadva 3ms 4392 KiB
21 Elfogadva 3ms 4476 KiB
22 Elfogadva 3ms 4420 KiB
23 Elfogadva 3ms 4412 KiB
subtask4 23/23
24 Elfogadva 3ms 4412 KiB
25 Elfogadva 3ms 4516 KiB
26 Elfogadva 3ms 4600 KiB
27 Elfogadva 3ms 4616 KiB
28 Elfogadva 3ms 4776 KiB
29 Elfogadva 3ms 5056 KiB
30 Elfogadva 3ms 5016 KiB
31 Elfogadva 3ms 5024 KiB
32 Elfogadva 3ms 5020 KiB
subtask5 37/37
33 Elfogadva 3ms 5020 KiB
34 Elfogadva 3ms 2240 KiB
35 Elfogadva 3ms 2448 KiB
36 Elfogadva 3ms 2664 KiB
37 Elfogadva 3ms 2880 KiB
38 Elfogadva 3ms 3092 KiB
39 Elfogadva 2ms 3172 KiB
40 Elfogadva 2ms 3172 KiB
41 Elfogadva 3ms 3384 KiB
42 Elfogadva 2ms 3384 KiB
43 Elfogadva 3ms 3516 KiB
44 Elfogadva 3ms 3596 KiB
45 Elfogadva 3ms 3608 KiB
46 Elfogadva 3ms 3884 KiB
47 Elfogadva 3ms 4188 KiB
48 Elfogadva 3ms 4308 KiB
49 Elfogadva 3ms 4392 KiB
50 Elfogadva 3ms 4476 KiB
51 Elfogadva 3ms 4420 KiB
52 Elfogadva 3ms 4412 KiB
53 Elfogadva 3ms 4516 KiB
54 Elfogadva 3ms 4600 KiB
55 Elfogadva 3ms 4616 KiB
56 Elfogadva 3ms 4776 KiB
57 Elfogadva 3ms 5056 KiB
58 Elfogadva 3ms 5016 KiB
59 Elfogadva 3ms 5024 KiB
60 Elfogadva 3ms 5020 KiB
61 Elfogadva 4ms 5200 KiB
62 Elfogadva 6ms 5932 KiB
63 Elfogadva 6ms 5808 KiB
64 Elfogadva 7ms 6048 KiB
65 Elfogadva 7ms 6232 KiB
66 Elfogadva 8ms 6420 KiB
67 Elfogadva 7ms 6188 KiB
68 Elfogadva 7ms 6244 KiB
69 Elfogadva 7ms 6260 KiB
70 Elfogadva 7ms 6276 KiB
71 Elfogadva 7ms 6268 KiB
72 Elfogadva 7ms 6292 KiB