6668 2023. 12. 15 18:47:24 szil Pac-Man cpp17 Hibás válasz 83/100 2.026s 152080 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 >= 650 && time_elapsed <= 800) {
        exit(1);
		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 2048 KiB
2 Elfogadva 3ms 2272 KiB
3 Elfogadva 3ms 2604 KiB
subtask2 18/18
4 Elfogadva 3ms 2704 KiB
5 Elfogadva 3ms 3228 KiB
6 Elfogadva 3ms 3172 KiB
7 Elfogadva 3ms 3080 KiB
8 Elfogadva 3ms 3032 KiB
9 Elfogadva 3ms 3500 KiB
10 Elfogadva 3ms 3492 KiB
11 Elfogadva 3ms 3676 KiB
12 Elfogadva 3ms 3716 KiB
13 Elfogadva 3ms 4344 KiB
subtask3 19/19
14 Elfogadva 4ms 5688 KiB
15 Elfogadva 4ms 4360 KiB
16 Elfogadva 25ms 4328 KiB
17 Elfogadva 10ms 4460 KiB
18 Elfogadva 2.026s 4676 KiB
19 Elfogadva 1.909s 4496 KiB
20 Elfogadva 3ms 5136 KiB
21 Elfogadva 32ms 5248 KiB
22 Elfogadva 624ms 5480 KiB
23 Elfogadva 21ms 5564 KiB
24 Elfogadva 270ms 5204 KiB
25 Elfogadva 32ms 5476 KiB
26 Elfogadva 3ms 5584 KiB
subtask4 24/24
27 Elfogadva 268ms 43976 KiB
28 Elfogadva 9ms 7612 KiB
29 Elfogadva 512ms 104272 KiB
30 Elfogadva 513ms 105908 KiB
31 Elfogadva 513ms 101452 KiB
32 Elfogadva 509ms 105348 KiB
33 Elfogadva 4ms 5996 KiB
34 Elfogadva 246ms 44536 KiB
35 Elfogadva 519ms 103256 KiB
36 Elfogadva 273ms 44360 KiB
37 Elfogadva 501ms 100756 KiB
38 Elfogadva 508ms 97052 KiB
39 Elfogadva 4ms 5720 KiB
subtask5 22/22
40 Elfogadva 240ms 30596 KiB
41 Elfogadva 4ms 5788 KiB
42 Elfogadva 52ms 11936 KiB
43 Elfogadva 197ms 25684 KiB
44 Elfogadva 437ms 61408 KiB
45 Elfogadva 444ms 61408 KiB
46 Elfogadva 3ms 5908 KiB
47 Elfogadva 3ms 5552 KiB
48 Elfogadva 34ms 9692 KiB
49 Elfogadva 180ms 23668 KiB
50 Elfogadva 193ms 25572 KiB
51 Elfogadva 201ms 25308 KiB
52 Elfogadva 460ms 61820 KiB
53 Elfogadva 3ms 5948 KiB
subtask6 0/17
54 Elfogadva 504ms 85692 KiB
55 Elfogadva 703ms 151708 KiB
56 Elfogadva 225ms 27904 KiB
57 Elfogadva 210ms 25860 KiB
58 Elfogadva 210ms 25828 KiB
59 Elfogadva 451ms 61500 KiB
60 Hibás válasz 741ms 152080 KiB
61 Elfogadva 229ms 27836 KiB
62 Elfogadva 210ms 25968 KiB
63 Elfogadva 209ms 25680 KiB
64 Elfogadva 453ms 60396 KiB
65 Elfogadva 451ms 61832 KiB
66 Elfogadva 386ms 65068 KiB