54062023-05-12 17:05:22szilSzéfnyitáscpp14Elfogadva 100/1008ms6268 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2016 KiB
2Elfogadva3ms2076 KiB
subtask216/16
3Elfogadva3ms2076 KiB
4Elfogadva3ms2260 KiB
5Elfogadva3ms2488 KiB
6Elfogadva3ms2696 KiB
7Elfogadva3ms2912 KiB
8Elfogadva3ms3116 KiB
9Elfogadva3ms3196 KiB
10Elfogadva3ms3324 KiB
11Elfogadva3ms3548 KiB
12Elfogadva2ms3620 KiB
13Elfogadva3ms3708 KiB
14Elfogadva2ms3620 KiB
subtask324/24
15Elfogadva2ms3620 KiB
16Elfogadva3ms3636 KiB
17Elfogadva3ms3664 KiB
18Elfogadva3ms3908 KiB
19Elfogadva3ms4228 KiB
20Elfogadva3ms4440 KiB
21Elfogadva3ms4420 KiB
22Elfogadva3ms4420 KiB
23Elfogadva3ms4428 KiB
subtask423/23
24Elfogadva3ms4428 KiB
25Elfogadva3ms4456 KiB
26Elfogadva3ms4464 KiB
27Elfogadva3ms4728 KiB
28Elfogadva3ms4788 KiB
29Elfogadva3ms4760 KiB
30Elfogadva3ms4808 KiB
31Elfogadva3ms4864 KiB
32Elfogadva3ms4920 KiB
subtask537/37
33Elfogadva3ms4920 KiB
34Elfogadva3ms2260 KiB
35Elfogadva3ms2488 KiB
36Elfogadva3ms2696 KiB
37Elfogadva3ms2912 KiB
38Elfogadva3ms3116 KiB
39Elfogadva3ms3196 KiB
40Elfogadva3ms3324 KiB
41Elfogadva3ms3548 KiB
42Elfogadva2ms3620 KiB
43Elfogadva3ms3708 KiB
44Elfogadva2ms3620 KiB
45Elfogadva3ms3636 KiB
46Elfogadva3ms3664 KiB
47Elfogadva3ms3908 KiB
48Elfogadva3ms4228 KiB
49Elfogadva3ms4440 KiB
50Elfogadva3ms4420 KiB
51Elfogadva3ms4420 KiB
52Elfogadva3ms4428 KiB
53Elfogadva3ms4456 KiB
54Elfogadva3ms4464 KiB
55Elfogadva3ms4728 KiB
56Elfogadva3ms4788 KiB
57Elfogadva3ms4760 KiB
58Elfogadva3ms4808 KiB
59Elfogadva3ms4864 KiB
60Elfogadva3ms4920 KiB
61Elfogadva4ms5048 KiB
62Elfogadva6ms5780 KiB
63Elfogadva6ms5664 KiB
64Elfogadva7ms5884 KiB
65Elfogadva7ms6140 KiB
66Elfogadva8ms6268 KiB
67Elfogadva7ms6024 KiB
68Elfogadva7ms6120 KiB
69Elfogadva7ms6072 KiB
70Elfogadva7ms6136 KiB
71Elfogadva8ms6164 KiB
72Elfogadva7ms5992 KiB