5406 2023. 05. 12 17:05:22 szil Széfnyitás cpp14 Elfogadva 100/100 8ms 6268 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;

    if (n <= 3) {
        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";
                            return 0;
                        }
                    }
                }
            }
        }
    }

    for (int i = 0; i < n; i++) {
        bits[i] = rand() % 2;
    }

    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 2016 KiB
2 Elfogadva 3ms 2076 KiB
subtask2 16/16
3 Elfogadva 3ms 2076 KiB
4 Elfogadva 3ms 2260 KiB
5 Elfogadva 3ms 2488 KiB
6 Elfogadva 3ms 2696 KiB
7 Elfogadva 3ms 2912 KiB
8 Elfogadva 3ms 3116 KiB
9 Elfogadva 3ms 3196 KiB
10 Elfogadva 3ms 3324 KiB
11 Elfogadva 3ms 3548 KiB
12 Elfogadva 2ms 3620 KiB
13 Elfogadva 3ms 3708 KiB
14 Elfogadva 2ms 3620 KiB
subtask3 24/24
15 Elfogadva 2ms 3620 KiB
16 Elfogadva 3ms 3636 KiB
17 Elfogadva 3ms 3664 KiB
18 Elfogadva 3ms 3908 KiB
19 Elfogadva 3ms 4228 KiB
20 Elfogadva 3ms 4440 KiB
21 Elfogadva 3ms 4420 KiB
22 Elfogadva 3ms 4420 KiB
23 Elfogadva 3ms 4428 KiB
subtask4 23/23
24 Elfogadva 3ms 4428 KiB
25 Elfogadva 3ms 4456 KiB
26 Elfogadva 3ms 4464 KiB
27 Elfogadva 3ms 4728 KiB
28 Elfogadva 3ms 4788 KiB
29 Elfogadva 3ms 4760 KiB
30 Elfogadva 3ms 4808 KiB
31 Elfogadva 3ms 4864 KiB
32 Elfogadva 3ms 4920 KiB
subtask5 37/37
33 Elfogadva 3ms 4920 KiB
34 Elfogadva 3ms 2260 KiB
35 Elfogadva 3ms 2488 KiB
36 Elfogadva 3ms 2696 KiB
37 Elfogadva 3ms 2912 KiB
38 Elfogadva 3ms 3116 KiB
39 Elfogadva 3ms 3196 KiB
40 Elfogadva 3ms 3324 KiB
41 Elfogadva 3ms 3548 KiB
42 Elfogadva 2ms 3620 KiB
43 Elfogadva 3ms 3708 KiB
44 Elfogadva 2ms 3620 KiB
45 Elfogadva 3ms 3636 KiB
46 Elfogadva 3ms 3664 KiB
47 Elfogadva 3ms 3908 KiB
48 Elfogadva 3ms 4228 KiB
49 Elfogadva 3ms 4440 KiB
50 Elfogadva 3ms 4420 KiB
51 Elfogadva 3ms 4420 KiB
52 Elfogadva 3ms 4428 KiB
53 Elfogadva 3ms 4456 KiB
54 Elfogadva 3ms 4464 KiB
55 Elfogadva 3ms 4728 KiB
56 Elfogadva 3ms 4788 KiB
57 Elfogadva 3ms 4760 KiB
58 Elfogadva 3ms 4808 KiB
59 Elfogadva 3ms 4864 KiB
60 Elfogadva 3ms 4920 KiB
61 Elfogadva 4ms 5048 KiB
62 Elfogadva 6ms 5780 KiB
63 Elfogadva 6ms 5664 KiB
64 Elfogadva 7ms 5884 KiB
65 Elfogadva 7ms 6140 KiB
66 Elfogadva 8ms 6268 KiB
67 Elfogadva 7ms 6024 KiB
68 Elfogadva 7ms 6120 KiB
69 Elfogadva 7ms 6072 KiB
70 Elfogadva 7ms 6136 KiB
71 Elfogadva 8ms 6164 KiB
72 Elfogadva 7ms 5992 KiB