55652023-07-27 11:25:18zsomborSzéfnyitáscpp17Hibás válasz 0/1009ms11180 KiB
#include <iostream>
#include <vector>
#include <set>
using namespace std;

int n, k;
vector <int> B(3e4, 0);
vector <vector <int>> T(3e4, vector <int>(2, 1));
vector <vector <int>> t(3e4, vector <int>(2, 1));
vector <int> cur(3e4, 1);

void solve(set <int> s) {
    /*cout << endl << i << "  ";
    for (int l = 1; l <= n; l++) cout << v[l] << " ";
    cout << "  ";
    for (int l = 1; l <= n; l++) cout << cur[l] << " ";*/
    int i = *s.begin(), J = cur[i], j = cur[i];
    vector <set <int>> v(n + 1);
    for (int cnt = 0; cnt < 23000; cnt++) {
        for (int l = 1; l <= n; l++) {
            if (!s.count(l)) continue;
            if (B[cur[l]] != B[j]) {
                s.erase(l);
                v[j].insert(l);
            }
            cur[l] = T[cur[l]][B[j]];
        }
        j = T[j][B[j]];
    }
    j = J;
    for (int cnt = 0; cnt < n; cnt++) {
        if (v[j].empty()) { j = T[j][B[j]]; continue; }
        t[(i - 1) * n + j][1 - B[j]] = ((*v[j].begin()) - 1) * n + cur[*v[j].begin()];
        solve(v[j]);
        v[j].clear();
        j = T[j][B[j]];
    }
}

int test(int A) {
    int a = A, b = 1, cnt = 0;
    for (int i = 0; i < 1e2; i++) {
        int x = B[a], y = B[(b % n ? b % n : n)];
        cout << a << " " << b << "  " << x << " " << y << endl;
        if (x != y) cnt++;
        a = T[a][y]; b = t[b][x];
    }
    if (cnt >= k) cout << A << " ";
    return cnt;
}

bool teszt = 1;

int main() {
    if (teszt) {
        n = 3;
        k = n;
        srand(time(0));
        for (int i = 1; i <= n; i++) {
            B[i] = rand() % 2;
            T[i][0] = rand() % n + 1;
            T[i][1] = rand() % n + 1;
        }
        cout << "bemenet:\n";
        for (int i = 1; i <= n; i++) {
            cout << B[i] << " " << T[i][0] << " " << T[i][1] << endl;
        }
        cout << endl;
    }
    else {
        cin >> n;
        for (int i = 1; i <= n; i++) cin >> B[i] >> T[i][0] >> T[i][1];
        cin >> k;
    }
    set <int> s;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            t[(i - 1) * n + j][0] = (i - 1) * n + T[j][0];
            t[(i - 1) * n + j][1] = (i - 1) * n + T[j][1];
        }
        cur[i] = i;
        s.insert(i);
    }
    solve(s);
    cout << n * n << " 1\n";
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cout << B[j] << " " << t[(i - 1) * n + j][0] << " " << t[(i - 1) * n + j][1] << "\n";
        }
    }

    cout << endl;
    bool jo = true;
    //for (int i = 1; i <= n; i++) if (test(i) >= k) jo = false;
    test(3);
    cout << endl << (jo ? "HELYES" : "ROSSZ");
}

/*

5
1 5 1
1 1 4
0 5 4
0 2 3
0 2 2
5


3
1 2 1
0 1 3
0 2 2
3

*/
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Hibás válasz9ms8556 KiB
2Hibás válasz9ms8852 KiB
subtask20/16
3Hibás válasz8ms8912 KiB
4Hibás válasz8ms8872 KiB
5Hibás válasz8ms8876 KiB
6Hibás válasz8ms9128 KiB
7Hibás válasz8ms9360 KiB
8Hibás válasz8ms9316 KiB
9Hibás válasz9ms9472 KiB
10Hibás válasz8ms9432 KiB
11Hibás válasz9ms9688 KiB
12Hibás válasz9ms9900 KiB
13Hibás válasz9ms10092 KiB
subtask30/24
14Hibás válasz8ms10048 KiB
15Hibás válasz9ms9944 KiB
16Hibás válasz9ms10196 KiB
17Hibás válasz8ms10408 KiB
18Hibás válasz9ms10620 KiB
19Hibás válasz9ms10580 KiB
20Hibás válasz9ms10492 KiB
21Hibás válasz9ms10788 KiB
subtask40/23
22Hibás válasz9ms10704 KiB
23Hibás válasz9ms11016 KiB
24Hibás válasz8ms10700 KiB
25Hibás válasz8ms10704 KiB
26Hibás válasz8ms10880 KiB
27Hibás válasz8ms10700 KiB
28Hibás válasz8ms10700 KiB
29Hibás válasz8ms10700 KiB
subtask50/37
30Hibás válasz8ms8912 KiB
31Hibás válasz8ms8872 KiB
32Hibás válasz8ms8876 KiB
33Hibás válasz8ms9128 KiB
34Hibás válasz8ms9360 KiB
35Hibás válasz8ms9316 KiB
36Hibás válasz9ms9472 KiB
37Hibás válasz8ms9432 KiB
38Hibás válasz9ms9688 KiB
39Hibás válasz9ms9900 KiB
40Hibás válasz9ms10092 KiB
41Hibás válasz8ms10048 KiB
42Hibás válasz9ms9944 KiB
43Hibás válasz9ms10196 KiB
44Hibás válasz8ms10408 KiB
45Hibás válasz9ms10620 KiB
46Hibás válasz9ms10580 KiB
47Hibás válasz9ms10492 KiB
48Hibás válasz9ms10788 KiB
49Hibás válasz9ms10704 KiB
50Hibás válasz9ms11016 KiB
51Hibás válasz8ms10700 KiB
52Hibás válasz8ms10704 KiB
53Hibás válasz8ms10880 KiB
54Hibás válasz8ms10700 KiB
55Hibás válasz8ms10700 KiB
56Hibás válasz8ms10700 KiB
57Hibás válasz8ms10700 KiB
58Hibás válasz8ms10744 KiB
59Hibás válasz8ms10756 KiB
60Hibás válasz8ms10964 KiB
61Hibás válasz8ms10924 KiB
62Hibás válasz8ms10964 KiB
63Hibás válasz8ms11180 KiB
64Hibás válasz8ms11136 KiB
65Hibás válasz8ms11136 KiB
66Hibás válasz8ms11136 KiB
67Hibás válasz8ms11132 KiB
68Hibás válasz8ms11180 KiB