6664 2023. 12. 15 18:40:55 szil Pac-Man cpp17 Hibás válasz 83/100 1.651s 152088 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 >= 690 && 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 2244 KiB
3 Elfogadva 3ms 2576 KiB
subtask2 18/18
4 Elfogadva 3ms 2792 KiB
5 Elfogadva 3ms 3476 KiB
6 Elfogadva 3ms 3544 KiB
7 Elfogadva 3ms 3328 KiB
8 Elfogadva 3ms 3476 KiB
9 Elfogadva 3ms 3788 KiB
10 Elfogadva 3ms 3732 KiB
11 Elfogadva 3ms 3544 KiB
12 Elfogadva 3ms 3828 KiB
13 Elfogadva 3ms 4632 KiB
subtask3 19/19
14 Elfogadva 4ms 5904 KiB
15 Elfogadva 4ms 4576 KiB
16 Elfogadva 21ms 4700 KiB
17 Elfogadva 9ms 4536 KiB
18 Elfogadva 1.651s 4708 KiB
19 Elfogadva 1.554s 4576 KiB
20 Elfogadva 3ms 4952 KiB
21 Elfogadva 26ms 4808 KiB
22 Elfogadva 509ms 5152 KiB
23 Elfogadva 18ms 4984 KiB
24 Elfogadva 221ms 4808 KiB
25 Elfogadva 27ms 5040 KiB
26 Elfogadva 3ms 5656 KiB
subtask4 24/24
27 Elfogadva 273ms 43892 KiB
28 Elfogadva 8ms 7656 KiB
29 Elfogadva 546ms 104312 KiB
30 Elfogadva 479ms 106128 KiB
31 Elfogadva 460ms 101820 KiB
32 Elfogadva 474ms 105488 KiB
33 Elfogadva 4ms 6184 KiB
34 Elfogadva 244ms 44728 KiB
35 Elfogadva 460ms 103864 KiB
36 Elfogadva 241ms 44684 KiB
37 Elfogadva 458ms 100832 KiB
38 Elfogadva 460ms 97096 KiB
39 Elfogadva 4ms 5624 KiB
subtask5 22/22
40 Elfogadva 230ms 30600 KiB
41 Elfogadva 4ms 5916 KiB
42 Elfogadva 50ms 12180 KiB
43 Elfogadva 193ms 25788 KiB
44 Elfogadva 418ms 61692 KiB
45 Elfogadva 426ms 61716 KiB
46 Elfogadva 3ms 6272 KiB
47 Elfogadva 3ms 5996 KiB
48 Elfogadva 34ms 10100 KiB
49 Elfogadva 175ms 24120 KiB
50 Elfogadva 189ms 25928 KiB
51 Elfogadva 209ms 25492 KiB
52 Elfogadva 456ms 62064 KiB
53 Elfogadva 3ms 6040 KiB
subtask6 0/17
54 Elfogadva 504ms 85800 KiB
55 Elfogadva 703ms 151832 KiB
56 Elfogadva 221ms 28020 KiB
57 Elfogadva 207ms 26108 KiB
58 Elfogadva 203ms 26272 KiB
59 Elfogadva 449ms 61728 KiB
60 Hibás válasz 708ms 152088 KiB
61 Elfogadva 224ms 28136 KiB
62 Elfogadva 216ms 26200 KiB
63 Elfogadva 204ms 25900 KiB
64 Elfogadva 448ms 60540 KiB
65 Elfogadva 449ms 62072 KiB
66 Elfogadva 379ms 65356 KiB