69662023-12-22 00:10:48TuruTamasPac-Mancpp17Elfogadva 100/1001.072s80404 KiB
#include <bits/stdc++.h>
using namespace std;

#ifdef DEBUG
ifstream in_file("minta/be1.txt");
#define input in_file
#define INTHENAMEOFGOD
#else
#define input cin
#define INTHENAMEOFGOD \
    ios::sync_with_stdio(0); \
    cin.tie(0); \
    cout.tie(0);
#endif
typedef long long ll;
typedef vector<ll> vi;
typedef vector<vi> vvi;
typedef vector<bool> vb;
typedef pair<ll, ll> pii;
typedef array<ll, 3> pt;

ll N, x;
vector<pt> ps, points, sp;
set<pt> l;
map<pt, bool> m;
set<int> ax;

void dfs(pt x) {
    m[x] = true;
    for (int axis : ax) {
        pt next = x;
        next[axis]++;
        if (l.count(next) && !m[next]) {
            dfs(next);
        }
        next[axis] -= 2;
        if (l.count(next) && !m[next]) {
            dfs(next);
        }
    }
}

void validate_layer(int i) {
    ax = {0, 1, 2};
    ax.erase(i);
    m.clear();
    dfs(*l.begin());
    for (pt p : l) {
        if (!m[p]) {
            cout << "NO\n";
            exit(0);
        }
    }

    sp.clear();
    for (pt p : l) {
        sp.push_back(p);
    }

    int a = *ax.begin();
    int b = *++ax.begin();
    for (int i = 0; i < 2; i++) {
        sort(sp.begin(), sp.end(), [&](pt l, pt r) {
            if (l[a] == r[a])
                return l[b] < r[b];
            return l[a] < r[a];
        });

        ll row = -1;
        pt last;
        for (pt p : sp) {
            if (p[a] != row)
                row = p[a];
            else if (p[b] != last[b]+1) {
                cout << "NO\n";
                exit(0);
            }
            last = p;
        }

        int c = a;
        a = b;
        b = c;
    }
}

void dfs3d(pt x) {
    m[x] = true;
    for (int axis : ax) {
        pt next = x;
        next[axis]++;
        if (l.count(next) && !m[next])
            dfs3d(next);
        next[axis] -= 2;
        if (l.count(next) && !m[next])
            dfs3d(next);
    }
}

int main() {
    INTHENAMEOFGOD
    input >> N;
    points.resize(N);
    ps.resize(N);
    for (ll n = 0; n < N; n++) {
        input >> x;
        points[n][0] = x;
    }
    for (ll n = 0; n < N; n++) {
        input >> x;
        points[n][1] = x;
    }
    for (ll n = 0; n < N; n++){
        input >> x;
        points[n][2] = x;
    }
    for (pt p : points)
        l.insert(p);
    ax = {0, 1, 2};
    dfs3d(points[0]);
    for (pt p : points) {
        if (!m[p]) {
            cout << "NO\n";
            exit(0);
        }
    }
    l.clear();
    
    for (int i = 0; i < 3; i++) {
        copy_n(points.begin(), N, ps.begin());
        sort(ps.begin(), ps.end(), [&](pt a, pt b) {
            return a[i] < b[i];
        });
        ll layer = ps[0][i];
        l.clear();
        for (pt p : ps) {
            if (p[i] != layer) {
                validate_layer(i);
                layer = p[i];
                l.clear();
            }
            l.insert(p);
        }
        validate_layer(i);
    }
    cout << "YES\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1952 KiB
2Elfogadva3ms2152 KiB
3Elfogadva3ms2372 KiB
subtask218/18
4Elfogadva3ms2460 KiB
5Elfogadva3ms2716 KiB
6Elfogadva3ms2832 KiB
7Elfogadva3ms3040 KiB
8Elfogadva3ms3128 KiB
9Elfogadva3ms3216 KiB
10Elfogadva3ms3220 KiB
11Elfogadva3ms3288 KiB
12Elfogadva3ms3216 KiB
13Elfogadva3ms3480 KiB
subtask319/19
14Elfogadva7ms4780 KiB
15Elfogadva3ms3456 KiB
16Elfogadva18ms6312 KiB
17Elfogadva35ms8084 KiB
18Elfogadva61ms8060 KiB
19Elfogadva61ms7936 KiB
20Elfogadva3ms3664 KiB
21Elfogadva16ms5900 KiB
22Elfogadva27ms8060 KiB
23Elfogadva28ms8076 KiB
24Elfogadva46ms7940 KiB
25Elfogadva26ms7944 KiB
26Elfogadva3ms3752 KiB
subtask424/24
27Elfogadva79ms25692 KiB
28Elfogadva10ms5380 KiB
29Elfogadva902ms69172 KiB
30Elfogadva945ms73748 KiB
31Elfogadva934ms69092 KiB
32Elfogadva930ms69264 KiB
33Elfogadva7ms4788 KiB
34Elfogadva507ms58452 KiB
35Elfogadva925ms65600 KiB
36Elfogadva620ms63544 KiB
37Elfogadva938ms63708 KiB
38Elfogadva356ms66536 KiB
39Elfogadva6ms5268 KiB
subtask522/22
40Elfogadva83ms26364 KiB
41Elfogadva4ms5108 KiB
42Elfogadva111ms22048 KiB
43Elfogadva486ms67532 KiB
44Elfogadva1.039s66496 KiB
45Elfogadva1.072s67504 KiB
46Elfogadva3ms4904 KiB
47Elfogadva3ms4908 KiB
48Elfogadva75ms16312 KiB
49Elfogadva501ms56020 KiB
50Elfogadva485ms65632 KiB
51Elfogadva758ms67460 KiB
52Elfogadva409ms68252 KiB
53Elfogadva3ms5212 KiB
subtask617/17
54Elfogadva85ms26900 KiB
55Elfogadva550ms70380 KiB
56Elfogadva451ms62872 KiB
57Elfogadva550ms63912 KiB
58Elfogadva723ms67000 KiB
59Elfogadva1.072s68296 KiB
60Elfogadva344ms71048 KiB
61Elfogadva456ms59492 KiB
62Elfogadva523ms68220 KiB
63Elfogadva713ms68580 KiB
64Elfogadva1.072s67344 KiB
65Elfogadva423ms67820 KiB
66Elfogadva541ms80404 KiB