66682023-12-15 18:47:24szilPac-Mancpp17Hibás válasz 83/1002.026s152080 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2048 KiB
2Elfogadva3ms2272 KiB
3Elfogadva3ms2604 KiB
subtask218/18
4Elfogadva3ms2704 KiB
5Elfogadva3ms3228 KiB
6Elfogadva3ms3172 KiB
7Elfogadva3ms3080 KiB
8Elfogadva3ms3032 KiB
9Elfogadva3ms3500 KiB
10Elfogadva3ms3492 KiB
11Elfogadva3ms3676 KiB
12Elfogadva3ms3716 KiB
13Elfogadva3ms4344 KiB
subtask319/19
14Elfogadva4ms5688 KiB
15Elfogadva4ms4360 KiB
16Elfogadva25ms4328 KiB
17Elfogadva10ms4460 KiB
18Elfogadva2.026s4676 KiB
19Elfogadva1.909s4496 KiB
20Elfogadva3ms5136 KiB
21Elfogadva32ms5248 KiB
22Elfogadva624ms5480 KiB
23Elfogadva21ms5564 KiB
24Elfogadva270ms5204 KiB
25Elfogadva32ms5476 KiB
26Elfogadva3ms5584 KiB
subtask424/24
27Elfogadva268ms43976 KiB
28Elfogadva9ms7612 KiB
29Elfogadva512ms104272 KiB
30Elfogadva513ms105908 KiB
31Elfogadva513ms101452 KiB
32Elfogadva509ms105348 KiB
33Elfogadva4ms5996 KiB
34Elfogadva246ms44536 KiB
35Elfogadva519ms103256 KiB
36Elfogadva273ms44360 KiB
37Elfogadva501ms100756 KiB
38Elfogadva508ms97052 KiB
39Elfogadva4ms5720 KiB
subtask522/22
40Elfogadva240ms30596 KiB
41Elfogadva4ms5788 KiB
42Elfogadva52ms11936 KiB
43Elfogadva197ms25684 KiB
44Elfogadva437ms61408 KiB
45Elfogadva444ms61408 KiB
46Elfogadva3ms5908 KiB
47Elfogadva3ms5552 KiB
48Elfogadva34ms9692 KiB
49Elfogadva180ms23668 KiB
50Elfogadva193ms25572 KiB
51Elfogadva201ms25308 KiB
52Elfogadva460ms61820 KiB
53Elfogadva3ms5948 KiB
subtask60/17
54Elfogadva504ms85692 KiB
55Elfogadva703ms151708 KiB
56Elfogadva225ms27904 KiB
57Elfogadva210ms25860 KiB
58Elfogadva210ms25828 KiB
59Elfogadva451ms61500 KiB
60Hibás válasz741ms152080 KiB
61Elfogadva229ms27836 KiB
62Elfogadva210ms25968 KiB
63Elfogadva209ms25680 KiB
64Elfogadva453ms60396 KiB
65Elfogadva451ms61832 KiB
66Elfogadva386ms65068 KiB