6670 2023. 12. 15 18:49:34 szil Pac-Man cpp17 Hibás válasz 83/100 1.904s 151948 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 <= 700) {
		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 1912 KiB
2 Elfogadva 3ms 2240 KiB
3 Elfogadva 3ms 2560 KiB
subtask2 18/18
4 Elfogadva 3ms 2664 KiB
5 Elfogadva 3ms 3556 KiB
6 Elfogadva 3ms 3256 KiB
7 Elfogadva 3ms 3356 KiB
8 Elfogadva 3ms 3556 KiB
9 Elfogadva 3ms 3752 KiB
10 Elfogadva 3ms 3820 KiB
11 Elfogadva 3ms 3988 KiB
12 Elfogadva 3ms 4168 KiB
13 Elfogadva 3ms 5096 KiB
subtask3 19/19
14 Elfogadva 4ms 6680 KiB
15 Elfogadva 4ms 5252 KiB
16 Elfogadva 24ms 5220 KiB
17 Elfogadva 10ms 5276 KiB
18 Elfogadva 1.904s 5548 KiB
19 Elfogadva 1.794s 5444 KiB
20 Elfogadva 3ms 5588 KiB
21 Elfogadva 29ms 5456 KiB
22 Elfogadva 587ms 5672 KiB
23 Elfogadva 20ms 5560 KiB
24 Elfogadva 254ms 5532 KiB
25 Elfogadva 30ms 5776 KiB
26 Elfogadva 3ms 6160 KiB
subtask4 24/24
27 Elfogadva 280ms 44556 KiB
28 Elfogadva 9ms 8088 KiB
29 Elfogadva 510ms 104860 KiB
30 Elfogadva 523ms 106412 KiB
31 Elfogadva 499ms 101792 KiB
32 Elfogadva 527ms 105472 KiB
33 Elfogadva 4ms 6132 KiB
34 Elfogadva 250ms 44532 KiB
35 Elfogadva 524ms 103364 KiB
36 Elfogadva 248ms 44500 KiB
37 Elfogadva 456ms 100776 KiB
38 Elfogadva 483ms 97184 KiB
39 Elfogadva 4ms 5680 KiB
subtask5 22/22
40 Elfogadva 244ms 30656 KiB
41 Elfogadva 4ms 5972 KiB
42 Elfogadva 52ms 12144 KiB
43 Elfogadva 193ms 25900 KiB
44 Elfogadva 439ms 61540 KiB
45 Elfogadva 458ms 61412 KiB
46 Elfogadva 3ms 5880 KiB
47 Elfogadva 3ms 5632 KiB
48 Elfogadva 35ms 9768 KiB
49 Elfogadva 180ms 23792 KiB
50 Elfogadva 194ms 25588 KiB
51 Elfogadva 207ms 25356 KiB
52 Elfogadva 448ms 61936 KiB
53 Elfogadva 3ms 5984 KiB
subtask6 0/17
54 Elfogadva 500ms 85664 KiB
55 Hibás válasz 703ms 151692 KiB
56 Elfogadva 217ms 27932 KiB
57 Elfogadva 215ms 25892 KiB
58 Elfogadva 224ms 26044 KiB
59 Elfogadva 453ms 61584 KiB
60 Elfogadva 643ms 151948 KiB
61 Elfogadva 230ms 28112 KiB
62 Elfogadva 209ms 26244 KiB
63 Elfogadva 208ms 25944 KiB
64 Elfogadva 444ms 60664 KiB
65 Elfogadva 446ms 62128 KiB
66 Elfogadva 340ms 65304 KiB