54052023-05-12 17:04:49szilSzéfnyitáscpp14Hibás válasz 16/1003ms4696 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;

    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
1Elfogadva3ms1708 KiB
2Elfogadva3ms1872 KiB
subtask216/16
3Elfogadva3ms1872 KiB
4Elfogadva3ms2080 KiB
5Elfogadva3ms2304 KiB
6Elfogadva3ms2512 KiB
7Elfogadva3ms2732 KiB
8Elfogadva3ms2804 KiB
9Elfogadva2ms2800 KiB
10Elfogadva3ms2936 KiB
11Elfogadva3ms3012 KiB
12Elfogadva2ms3020 KiB
13Elfogadva3ms3144 KiB
14Elfogadva2ms3356 KiB
subtask30/24
15Elfogadva2ms3356 KiB
16Hibás válasz3ms3444 KiB
17Hibás válasz2ms3444 KiB
18Hibás válasz2ms3448 KiB
19Hibás válasz3ms3536 KiB
20Hibás válasz3ms3660 KiB
21Hibás válasz3ms3648 KiB
22Hibás válasz3ms3652 KiB
23Hibás válasz3ms3648 KiB
subtask40/23
24Hibás válasz3ms3648 KiB
25Hibás válasz3ms3740 KiB
26Hibás válasz2ms3648 KiB
27Hibás válasz3ms3780 KiB
28Hibás válasz3ms3996 KiB
29Hibás válasz3ms3992 KiB
30Hibás válasz3ms4056 KiB
31Hibás válasz3ms4312 KiB
32Hibás válasz2ms4204 KiB
subtask50/37
33Hibás válasz2ms4204 KiB
34Elfogadva3ms2080 KiB
35Elfogadva3ms2304 KiB
36Elfogadva3ms2512 KiB
37Elfogadva3ms2732 KiB
38Elfogadva3ms2804 KiB
39Elfogadva2ms2800 KiB
40Elfogadva3ms2936 KiB
41Elfogadva3ms3012 KiB
42Elfogadva2ms3020 KiB
43Elfogadva3ms3144 KiB
44Elfogadva2ms3356 KiB
45Hibás válasz3ms3444 KiB
46Hibás válasz2ms3444 KiB
47Hibás válasz2ms3448 KiB
48Hibás válasz3ms3536 KiB
49Hibás válasz3ms3660 KiB
50Hibás válasz3ms3648 KiB
51Hibás válasz3ms3652 KiB
52Hibás válasz3ms3648 KiB
53Hibás válasz3ms3740 KiB
54Hibás válasz2ms3648 KiB
55Hibás válasz3ms3780 KiB
56Hibás válasz3ms3996 KiB
57Hibás válasz3ms3992 KiB
58Hibás válasz3ms4056 KiB
59Hibás válasz3ms4312 KiB
60Hibás válasz2ms4204 KiB
61Hibás válasz3ms4272 KiB
62Hibás válasz3ms4264 KiB
63Hibás válasz3ms4376 KiB
64Hibás válasz3ms4368 KiB
65Hibás válasz3ms4360 KiB
66Hibás válasz3ms4360 KiB
67Hibás válasz3ms4360 KiB
68Hibás válasz2ms4360 KiB
69Hibás válasz3ms4268 KiB
70Hibás válasz3ms4484 KiB
71Hibás válasz3ms4696 KiB
72Hibás válasz3ms4480 KiB