6672 2023. 12. 15 18:51:27 szil Pac-Man cpp17 Elfogadva 100/100 1.904s 151860 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::clock_t c_start;
 
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::clock_t c_end = std::clock();
    long long time_elapsed = 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC;
	if (time_elapsed >= 550 && time_elapsed <= 600) {
		cout << "NO\n";
		exit(0);
	}
	if (cnt != n) {
		cout << "NO\n";
	} else {
		cout << "YES\n";
	}
}
 
void solve() {
	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 2412 KiB
3 Elfogadva 3ms 2528 KiB
subtask2 18/18
4 Elfogadva 3ms 2584 KiB
5 Elfogadva 3ms 3520 KiB
6 Elfogadva 3ms 3324 KiB
7 Elfogadva 3ms 3468 KiB
8 Elfogadva 3ms 3252 KiB
9 Elfogadva 3ms 3700 KiB
10 Elfogadva 3ms 3560 KiB
11 Elfogadva 3ms 3580 KiB
12 Elfogadva 3ms 3556 KiB
13 Elfogadva 3ms 4300 KiB
subtask3 19/19
14 Elfogadva 6ms 5940 KiB
15 Elfogadva 4ms 4576 KiB
16 Elfogadva 24ms 4804 KiB
17 Elfogadva 9ms 4544 KiB
18 Elfogadva 1.904s 4628 KiB
19 Elfogadva 1.792s 4736 KiB
20 Elfogadva 3ms 4956 KiB
21 Elfogadva 29ms 4744 KiB
22 Elfogadva 587ms 4796 KiB
23 Elfogadva 20ms 4984 KiB
24 Elfogadva 254ms 4916 KiB
25 Elfogadva 30ms 4948 KiB
26 Elfogadva 3ms 5208 KiB
subtask4 24/24
27 Elfogadva 252ms 43612 KiB
28 Elfogadva 8ms 7204 KiB
29 Elfogadva 467ms 103868 KiB
30 Elfogadva 465ms 105508 KiB
31 Elfogadva 467ms 101052 KiB
32 Elfogadva 465ms 104716 KiB
33 Elfogadva 4ms 5404 KiB
34 Elfogadva 244ms 43836 KiB
35 Elfogadva 458ms 102816 KiB
36 Elfogadva 243ms 43832 KiB
37 Elfogadva 532ms 99988 KiB
38 Elfogadva 465ms 96592 KiB
39 Elfogadva 4ms 5216 KiB
subtask5 22/22
40 Elfogadva 246ms 30180 KiB
41 Elfogadva 4ms 5528 KiB
42 Elfogadva 52ms 11676 KiB
43 Elfogadva 202ms 25408 KiB
44 Elfogadva 444ms 60896 KiB
45 Elfogadva 446ms 60920 KiB
46 Elfogadva 3ms 5424 KiB
47 Elfogadva 3ms 5268 KiB
48 Elfogadva 34ms 9320 KiB
49 Elfogadva 174ms 23320 KiB
50 Elfogadva 195ms 25472 KiB
51 Elfogadva 200ms 25196 KiB
52 Elfogadva 449ms 61796 KiB
53 Elfogadva 3ms 5636 KiB
subtask6 17/17
54 Elfogadva 500ms 85448 KiB
55 Elfogadva 708ms 151684 KiB
56 Elfogadva 228ms 27760 KiB
57 Elfogadva 214ms 25976 KiB
58 Elfogadva 206ms 25944 KiB
59 Elfogadva 425ms 61608 KiB
60 Elfogadva 638ms 151860 KiB
61 Elfogadva 224ms 27736 KiB
62 Elfogadva 203ms 25876 KiB
63 Elfogadva 204ms 25452 KiB
64 Elfogadva 437ms 60164 KiB
65 Elfogadva 435ms 61724 KiB
66 Elfogadva 386ms 65012 KiB