69682023-12-22 00:41:40TuruTamasPac-Mancpp17Elfogadva 100/1001.057s79624 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> layer;
map<pt, bool> m;
set<int> ax;

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

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

    sp.clear();
    for (pt p : layer) {
        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;
        }

        swap(a, b);
    }
}

void dfs3d(pt x) {
    m[x] = true;
    for (int axis : ax) {
        pt next = x;
        next[axis]++;
        if (layer.count(next) && !m[next])
            dfs3d(next);
        next[axis] -= 2;
        if (layer.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 >> points[n][0];
    for (ll n = 0; n < N; n++)
        input >> points[n][1];
    for (ll n = 0; n < N; n++)
        input >> points[n][2];

    for (pt p : points)
        layer.insert(p);
    ax = {0, 1, 2};
    dfs3d(points[0]);
    for (pt p : points) {
        if (!m[p]) {
            cout << "NO\n";
            exit(0);
        }
    }
    layer.clear();

    copy_n(points.begin(), N, ps.begin());
    for (int axis = 0; axis < 3; axis++) {
        sort(ps.begin(), ps.end(), [&](pt a, pt b) {
            return a[axis] < b[axis];
        });
        ll layer_ind = ps[0][axis];
        layer.clear();
        for (pt p : ps) {
            if (p[axis] != layer_ind) {
                validate_layer(axis);
                layer_ind = p[axis];
                layer.clear();
            }
            layer.insert(p);
        }
        validate_layer(axis);
    }
    cout << "YES\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1976 KiB
2Elfogadva3ms2204 KiB
3Elfogadva3ms2276 KiB
subtask218/18
4Elfogadva3ms2652 KiB
5Elfogadva3ms2748 KiB
6Elfogadva3ms3112 KiB
7Elfogadva3ms3188 KiB
8Elfogadva3ms3440 KiB
9Elfogadva3ms3512 KiB
10Elfogadva3ms3556 KiB
11Elfogadva4ms3620 KiB
12Elfogadva3ms3684 KiB
13Elfogadva3ms3900 KiB
subtask319/19
14Elfogadva7ms5204 KiB
15Elfogadva3ms4008 KiB
16Elfogadva18ms6556 KiB
17Elfogadva34ms8116 KiB
18Elfogadva61ms8244 KiB
19Elfogadva59ms8120 KiB
20Elfogadva3ms4132 KiB
21Elfogadva16ms6552 KiB
22Elfogadva26ms8760 KiB
23Elfogadva28ms9060 KiB
24Elfogadva45ms8952 KiB
25Elfogadva25ms8912 KiB
26Elfogadva3ms4532 KiB
subtask424/24
27Elfogadva79ms26220 KiB
28Elfogadva10ms6032 KiB
29Elfogadva879ms69740 KiB
30Elfogadva859ms74324 KiB
31Elfogadva873ms69656 KiB
32Elfogadva860ms69732 KiB
33Elfogadva7ms5392 KiB
34Elfogadva476ms59028 KiB
35Elfogadva856ms65900 KiB
36Elfogadva619ms63888 KiB
37Elfogadva899ms64184 KiB
38Elfogadva352ms66652 KiB
39Elfogadva6ms5276 KiB
subtask522/22
40Elfogadva78ms26220 KiB
41Elfogadva3ms4488 KiB
42Elfogadva109ms21616 KiB
43Elfogadva510ms67056 KiB
44Elfogadva1.036s66204 KiB
45Elfogadva1.036s67112 KiB
46Elfogadva3ms4492 KiB
47Elfogadva3ms4492 KiB
48Elfogadva74ms15824 KiB
49Elfogadva477ms55412 KiB
50Elfogadva490ms65048 KiB
51Elfogadva786ms66964 KiB
52Elfogadva425ms67808 KiB
53Elfogadva3ms4604 KiB
subtask617/17
54Elfogadva83ms26256 KiB
55Elfogadva531ms69924 KiB
56Elfogadva446ms62412 KiB
57Elfogadva529ms63480 KiB
58Elfogadva680ms66420 KiB
59Elfogadva1.057s67584 KiB
60Elfogadva345ms70316 KiB
61Elfogadva460ms58616 KiB
62Elfogadva493ms67448 KiB
63Elfogadva695ms67836 KiB
64Elfogadva1.047s66676 KiB
65Elfogadva411ms67068 KiB
66Elfogadva490ms79624 KiB