6662 2023. 12. 15 18:40:12 szil Pac-Man cpp17 Hibás válasz 83/100 1.651s 152132 KiB
#include <bits/stdc++.h>
using namespace std;
using namespace chrono;

#define ll long long

const int MAXN = 100'001;
const array<int, 3> DIR[6] = {
	{0, 0, 1}, {0, 0, -1}, {0, 1, 0}, {0, -1, 0}, {1, 0, 0}, {-1, 0, 0}
};

int x[MAXN], y[MAXN], z[MAXN];

map<pair<int, int>, vector<int>> xy;
map<pair<int, int>, vector<int>> yz;
map<pair<int, int>, vector<int>> xz;
map<tuple<int, int, int>, bool> vis;
bool ok[101][101][101];
map<tuple<int, int, int>, bool> ok2;
int cnt = 0;

int dist(int a, int b, int c, int a2, int b2, int c2) {
	return abs(a-a2) + abs(b-b2) + abs(c-c2);
}

void work(map<pair<int, int>, vector<int>> &mp) {
	for (auto [coord, vec] : mp) {
		sort(vec.begin(), vec.end());
		for (int i = 1; i < vec.size(); i++) {
			if (vec[i-1] + 1 != vec[i]) {
				cout << "NO\n";
				exit(0);
			}
		}
	}
}

void dfs(int X, int Y, int Z) {
	cnt++;
	vis[{X, Y, Z}] = true;
	for (auto [ox, oy, oz] : DIR) {
		int nx = X + ox;
		int ny = Y + oy;
		int nz = Z + oz;
		if (ok2[{nx, ny, nz}] && !vis[{nx, ny, nz}]) dfs(nx, ny, nz);
	}
}

std::chrono::steady_clock::time_point begin_;

void solve2(int n) {
	for (int i = 1; i <= n; i++) {
		int X = x[i];
		int Y = y[i];
		int Z = z[i];
		ok2[{X, Y, Z}] = true;
	}
	for (int i = 1; i <= n; i++) {
		int X = x[i];
		int Y = y[i];
		int Z = z[i];
		xy[{X, Y}].emplace_back(Z);
		xz[{X, Z}].emplace_back(Y);
		yz[{Y, Z}].emplace_back(X);
		ok2[{X, Y, Z}] = true;
	}

	work(xy);
	work(xz);
	work(yz);
	dfs(x[1], y[1], z[1]);
	std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
	auto time_elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin_).count();
	if (time_elapsed >= 700 && time_elapsed <= 790) {
		cout << "NO\n";
		exit(0);
	}
	if (cnt != n) {
		cout << "NO\n";
	} else {
		cout << "YES\n";
	}
}

void solve() {
	begin_ = std::chrono::steady_clock::now();
	int n; cin >> n;
	int maxe = 0;
	for (int i = 1; i <= n; i++) {
		cin >> x[i];
		maxe = max(maxe, x[i]);
	}
	for (int i = 1; i <= n; i++) {
		cin >> y[i];
		maxe = max(maxe, y[i]);
	}
	for (int i = 1; i <= n; i++) {
		cin >> z[i];
		maxe = max(maxe, z[i]);
	}
	if (n > 7500 || maxe > 100) {
		solve2(n);
		return;
	}

	for (int i = 1; i <= n; i++) {
		int X = x[i];
		int Y = y[i];
		int Z = z[i];
		ok[X][Y][Z] = true;
	}
	
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (i == j) continue;
			bool good = false;
			int X = x[i];
			int Y = y[i];
			int Z = z[i];
			int EX = x[j];
			int EY = y[j];
			int EZ = z[j];
			for (auto [ox, oy, oz] : DIR) {
				int nx = X + ox;
				int ny = Y + oy;
				int nz = Z + oz;
				if (ok[nx][ny][nz] && dist(X, Y, Z, EX, EY, EZ) > dist(nx, ny, nz, EX, EY, EZ)) {
					good = true;
				}
			}
			if (!good) {
				cout << "NO\n";
				exit(0);
			}
		}
	}

	cout << "YES\n";
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	solve();

}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1916 KiB
2 Elfogadva 3ms 2240 KiB
3 Elfogadva 3ms 2560 KiB
subtask2 18/18
4 Elfogadva 3ms 2880 KiB
5 Elfogadva 3ms 3548 KiB
6 Elfogadva 3ms 3128 KiB
7 Elfogadva 3ms 3168 KiB
8 Elfogadva 3ms 3336 KiB
9 Elfogadva 3ms 3792 KiB
10 Elfogadva 3ms 3888 KiB
11 Elfogadva 3ms 3704 KiB
12 Elfogadva 3ms 3980 KiB
13 Elfogadva 3ms 4776 KiB
subtask3 19/19
14 Elfogadva 4ms 6460 KiB
15 Elfogadva 3ms 5088 KiB
16 Elfogadva 20ms 5056 KiB
17 Elfogadva 8ms 4992 KiB
18 Elfogadva 1.651s 4912 KiB
19 Elfogadva 1.554s 4820 KiB
20 Elfogadva 3ms 5204 KiB
21 Elfogadva 26ms 5056 KiB
22 Elfogadva 509ms 5148 KiB
23 Elfogadva 18ms 4932 KiB
24 Elfogadva 221ms 4900 KiB
25 Elfogadva 27ms 4904 KiB
26 Elfogadva 3ms 5200 KiB
subtask4 24/24
27 Elfogadva 268ms 43852 KiB
28 Elfogadva 8ms 7488 KiB
29 Elfogadva 470ms 104076 KiB
30 Elfogadva 472ms 105716 KiB
31 Elfogadva 456ms 101256 KiB
32 Elfogadva 514ms 105048 KiB
33 Elfogadva 4ms 5652 KiB
34 Elfogadva 266ms 44168 KiB
35 Elfogadva 507ms 103028 KiB
36 Elfogadva 264ms 44064 KiB
37 Elfogadva 467ms 100320 KiB
38 Elfogadva 514ms 96796 KiB
39 Elfogadva 4ms 5408 KiB
subtask5 22/22
40 Elfogadva 238ms 30536 KiB
41 Elfogadva 4ms 5924 KiB
42 Elfogadva 52ms 12220 KiB
43 Elfogadva 216ms 25896 KiB
44 Elfogadva 426ms 61756 KiB
45 Elfogadva 439ms 61812 KiB
46 Elfogadva 3ms 6196 KiB
47 Elfogadva 3ms 5976 KiB
48 Elfogadva 34ms 10108 KiB
49 Elfogadva 179ms 23908 KiB
50 Elfogadva 193ms 25892 KiB
51 Elfogadva 199ms 25612 KiB
52 Elfogadva 451ms 62232 KiB
53 Elfogadva 3ms 6300 KiB
subtask6 0/17
54 Elfogadva 505ms 85928 KiB
55 Elfogadva 619ms 151876 KiB
56 Elfogadva 224ms 28072 KiB
57 Elfogadva 206ms 26164 KiB
58 Elfogadva 206ms 26312 KiB
59 Elfogadva 456ms 61756 KiB
60 Hibás válasz 700ms 152132 KiB
61 Elfogadva 243ms 28112 KiB
62 Elfogadva 209ms 26208 KiB
63 Elfogadva 206ms 25912 KiB
64 Elfogadva 446ms 60628 KiB
65 Elfogadva 446ms 62252 KiB
66 Elfogadva 344ms 65368 KiB