55642023-07-27 11:25:12zsomborSzéfnyitáscpp17Hibás válasz 0/1009ms11432 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álasz9ms8552 KiB
2Hibás válasz9ms8856 KiB
subtask20/16
3Hibás válasz8ms9148 KiB
4Hibás válasz9ms9364 KiB
5Hibás válasz8ms9208 KiB
6Hibás válasz9ms9340 KiB
7Hibás válasz9ms9552 KiB
8Hibás válasz9ms9568 KiB
9Hibás válasz9ms9824 KiB
10Hibás válasz9ms10032 KiB
11Hibás válasz8ms10332 KiB
12Hibás válasz8ms10288 KiB
13Hibás válasz8ms10248 KiB
subtask30/24
14Hibás válasz9ms10340 KiB
15Hibás válasz9ms10644 KiB
16Hibás válasz8ms10600 KiB
17Hibás válasz8ms10600 KiB
18Hibás válasz8ms10496 KiB
19Hibás válasz8ms10684 KiB
20Hibás válasz9ms10644 KiB
21Hibás válasz9ms10692 KiB
subtask40/23
22Hibás válasz8ms10728 KiB
23Hibás válasz8ms10980 KiB
24Hibás válasz9ms10784 KiB
25Hibás válasz8ms10824 KiB
26Hibás válasz8ms10820 KiB
27Hibás válasz9ms10908 KiB
28Hibás válasz8ms10948 KiB
29Hibás válasz9ms10924 KiB
subtask50/37
30Hibás válasz8ms9148 KiB
31Hibás válasz9ms9364 KiB
32Hibás válasz8ms9208 KiB
33Hibás válasz9ms9340 KiB
34Hibás válasz9ms9552 KiB
35Hibás válasz9ms9568 KiB
36Hibás válasz9ms9824 KiB
37Hibás válasz9ms10032 KiB
38Hibás válasz8ms10332 KiB
39Hibás válasz8ms10288 KiB
40Hibás válasz8ms10248 KiB
41Hibás válasz9ms10340 KiB
42Hibás válasz9ms10644 KiB
43Hibás válasz8ms10600 KiB
44Hibás válasz8ms10600 KiB
45Hibás válasz8ms10496 KiB
46Hibás válasz8ms10684 KiB
47Hibás válasz9ms10644 KiB
48Hibás válasz9ms10692 KiB
49Hibás válasz8ms10728 KiB
50Hibás válasz8ms10980 KiB
51Hibás válasz9ms10784 KiB
52Hibás válasz8ms10824 KiB
53Hibás válasz8ms10820 KiB
54Hibás válasz9ms10908 KiB
55Hibás válasz8ms10948 KiB
56Hibás válasz9ms10924 KiB
57Hibás válasz9ms11184 KiB
58Hibás válasz8ms11264 KiB
59Hibás válasz8ms11304 KiB
60Hibás válasz9ms11240 KiB
61Hibás válasz9ms11236 KiB
62Hibás válasz9ms11432 KiB
63Hibás válasz8ms11344 KiB
64Hibás válasz8ms11344 KiB
65Hibás válasz8ms11348 KiB
66Hibás válasz8ms11360 KiB
67Hibás válasz8ms11356 KiB
68Hibás válasz8ms11352 KiB