6665 2023. 12. 15 18:42:45 szil Pac-Man cpp17 Hibás válasz 83/100 1.902s 152028 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 >= 650 && 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 2192 KiB
2 Elfogadva 3ms 2380 KiB
3 Elfogadva 3ms 2684 KiB
subtask2 18/18
4 Elfogadva 3ms 2796 KiB
5 Elfogadva 3ms 3328 KiB
6 Elfogadva 3ms 3268 KiB
7 Elfogadva 3ms 3316 KiB
8 Elfogadva 3ms 3104 KiB
9 Elfogadva 3ms 3600 KiB
10 Elfogadva 3ms 3704 KiB
11 Elfogadva 3ms 3632 KiB
12 Elfogadva 3ms 3812 KiB
13 Elfogadva 3ms 4788 KiB
subtask3 19/19
14 Elfogadva 4ms 5948 KiB
15 Elfogadva 4ms 4876 KiB
16 Elfogadva 24ms 4804 KiB
17 Elfogadva 10ms 4848 KiB
18 Elfogadva 1.902s 5160 KiB
19 Elfogadva 1.794s 5036 KiB
20 Elfogadva 3ms 5288 KiB
21 Elfogadva 29ms 5276 KiB
22 Elfogadva 587ms 5304 KiB
23 Elfogadva 20ms 5016 KiB
24 Elfogadva 254ms 5012 KiB
25 Elfogadva 30ms 5240 KiB
26 Elfogadva 3ms 5496 KiB
subtask4 24/24
27 Elfogadva 287ms 44152 KiB
28 Elfogadva 9ms 7780 KiB
29 Elfogadva 492ms 104668 KiB
30 Elfogadva 474ms 106200 KiB
31 Elfogadva 495ms 101556 KiB
32 Elfogadva 501ms 105420 KiB
33 Elfogadva 4ms 6140 KiB
34 Elfogadva 244ms 44420 KiB
35 Elfogadva 462ms 103440 KiB
36 Elfogadva 257ms 44476 KiB
37 Elfogadva 469ms 100784 KiB
38 Elfogadva 526ms 97228 KiB
39 Elfogadva 4ms 5896 KiB
subtask5 22/22
40 Elfogadva 259ms 30728 KiB
41 Elfogadva 4ms 5940 KiB
42 Elfogadva 52ms 11996 KiB
43 Elfogadva 197ms 25600 KiB
44 Elfogadva 425ms 61356 KiB
45 Elfogadva 421ms 61356 KiB
46 Elfogadva 3ms 5976 KiB
47 Elfogadva 3ms 5688 KiB
48 Elfogadva 34ms 9828 KiB
49 Elfogadva 178ms 23856 KiB
50 Elfogadva 193ms 25544 KiB
51 Elfogadva 200ms 25388 KiB
52 Elfogadva 425ms 61896 KiB
53 Elfogadva 3ms 6016 KiB
subtask6 0/17
54 Elfogadva 423ms 85624 KiB
55 Elfogadva 626ms 151652 KiB
56 Elfogadva 224ms 27988 KiB
57 Elfogadva 209ms 25848 KiB
58 Elfogadva 207ms 26004 KiB
59 Elfogadva 430ms 61540 KiB
60 Hibás válasz 704ms 152028 KiB
61 Elfogadva 225ms 27892 KiB
62 Elfogadva 216ms 26012 KiB
63 Elfogadva 217ms 25716 KiB
64 Elfogadva 449ms 60564 KiB
65 Elfogadva 437ms 61996 KiB
66 Elfogadva 324ms 65156 KiB