10018 2024. 03. 24 11:21:55 111 Rajz cpp17 Elfogadva 20/100 127ms 44280 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

struct DSU {
	vector<int> v;
	vector<vector<int>> c;

	DSU(int n) : v(n), c(n) {
		for (int i = 0; i < n; i++) {
			v[i] = i;
			c[i].push_back(i);
		}
	}

	int find(int a) {
		return v[a] == a ? a : v[a] = find(v[a]);
	}

	bool unite(int a, int b) {
		a = find(a);
		b = find(b);
		if (a == b) {
			return true;
		}
		if (c[a].size() < c[b].size()) {
			swap(a, b);
		}
		c[a].insert(c[a].end(), c[b].begin(), c[b].end());
		c[b].clear();
		v[b] = a;
		return false;
	}
};

int sign(int x) {
	return (x > 0) - (x < 0);
}

int cross(int x1, int y1, int x2, int y2) {
	return x1 * y2 - y1 * x2;
}

int orient(int x1, int y1, int x2, int y2, int x3, int y3) {
	return sign(cross(x1 - x2, y1 - y2, x3 - x2, y3 - y2));
}

bool test(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {
	int o1 = orient(x1, y1, x2, y2, x3, y3);
	int o2 = orient(x1, y1, x2, y2, x4, y4);
	int o3 = orient(x3, y3, x4, y4, x1, y1);
	int o4 = orient(x3, y3, x4, y4, x2, y2);
	return o1 != o2 && o3 != o4;
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N;
	cin>>N;
	struct Pt{ 
		int x,y; 
	};
	vector<Pt>v(N);
	for(int i=0;i<N;i++){
		cin>>v[i].x>>v[i].y;
	}
	vector<pair<int,pair<int,int>>>e;
	for(int i=0;i<N;i++){
		for(int j=i+1;j<N;j++){
			e.emplace_back((v[i].x-v[j].x)*(v[i].x-v[j].x)+(v[i].y-v[j].y)*(v[i].y-v[j].y),make_pair(i,j));
		}
	}
	sort(e.begin(),e.end());
	DSU dsu(N);
	vector<vector<int>>dp(N,vector<int>(N,0));
	auto T=[&](int i,int j)->bool{
		return test(v[i].x,v[i].y,v[j].x,v[j].y,0,0,1e9+7,1e9+9);
	};
	for(int i=0;i<e.size();){
		int ans=e[i].first;
		while(i<e.size()&&e[i].first==ans){
			auto[a,b]=e[i].second;
			int ca=dsu.find(a),cb=dsu.find(b);
			if(ca==cb){
				if(dp[a][b]^T(a,b)){
					cout<<ans<<'\n';
					return 0;
				}
			}
			else {
				int x=T(a,b);
				for(int i:dsu.c[ca]){
					for(int j:dsu.c[cb]){
						dp[i][j]=dp[j][i]=dp[i][a]^x^dp[j][b];
					}
				}
				dsu.unite(a,b);
			}
			i++;
		}
	}
	cout<<-1<<'\n';
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1828 KiB
2 Elfogadva 3ms 2060 KiB
subtask2 20/20
3 Elfogadva 3ms 2284 KiB
4 Elfogadva 3ms 2460 KiB
5 Elfogadva 3ms 2672 KiB
6 Elfogadva 3ms 2884 KiB
7 Elfogadva 3ms 3092 KiB
8 Elfogadva 3ms 3324 KiB
9 Elfogadva 3ms 3416 KiB
10 Elfogadva 3ms 3404 KiB
11 Elfogadva 2ms 3400 KiB
12 Elfogadva 2ms 3404 KiB
subtask3 0/20
13 Elfogadva 3ms 2284 KiB
14 Elfogadva 3ms 2460 KiB
15 Elfogadva 3ms 2672 KiB
16 Elfogadva 3ms 2884 KiB
17 Elfogadva 3ms 3092 KiB
18 Elfogadva 3ms 3324 KiB
19 Elfogadva 3ms 3416 KiB
20 Elfogadva 3ms 3404 KiB
21 Elfogadva 2ms 3400 KiB
22 Elfogadva 2ms 3404 KiB
23 Elfogadva 3ms 3384 KiB
24 Elfogadva 3ms 3384 KiB
25 Elfogadva 3ms 3472 KiB
26 Elfogadva 3ms 3608 KiB
27 Elfogadva 2ms 3688 KiB
28 Elfogadva 3ms 3688 KiB
29 Elfogadva 3ms 3688 KiB
30 Elfogadva 3ms 3824 KiB
31 Elfogadva 3ms 4028 KiB
subtask4 0/20
32 Elfogadva 3ms 2284 KiB
33 Elfogadva 3ms 2460 KiB
34 Elfogadva 3ms 2672 KiB
35 Elfogadva 3ms 2884 KiB
36 Elfogadva 3ms 3092 KiB
37 Elfogadva 3ms 3324 KiB
38 Elfogadva 3ms 3416 KiB
39 Elfogadva 3ms 3404 KiB
40 Elfogadva 2ms 3400 KiB
41 Elfogadva 2ms 3404 KiB
42 Elfogadva 3ms 3384 KiB
43 Elfogadva 3ms 3384 KiB
44 Elfogadva 3ms 3472 KiB
45 Elfogadva 3ms 3608 KiB
46 Elfogadva 2ms 3688 KiB
47 Elfogadva 3ms 3688 KiB
48 Elfogadva 3ms 3688 KiB
49 Elfogadva 3ms 3824 KiB
50 Elfogadva 3ms 4028 KiB
51 Elfogadva 4ms 4820 KiB
52 Elfogadva 3ms 4756 KiB
53 Elfogadva 3ms 4788 KiB
54 Elfogadva 3ms 4712 KiB
55 Elfogadva 4ms 5000 KiB
56 Elfogadva 3ms 4964 KiB
57 Elfogadva 3ms 4900 KiB
58 Elfogadva 3ms 4896 KiB
59 Elfogadva 4ms 5196 KiB
60 Elfogadva 3ms 5184 KiB
61 Elfogadva 3ms 5316 KiB
62 Elfogadva 3ms 5284 KiB
63 Elfogadva 3ms 5316 KiB
64 Elfogadva 3ms 5340 KiB
65 Elfogadva 3ms 5312 KiB
66 Elfogadva 3ms 5348 KiB
67 Elfogadva 3ms 5344 KiB
68 Elfogadva 3ms 5596 KiB
69 Elfogadva 4ms 5484 KiB
70 Elfogadva 3ms 5512 KiB
subtask5 0/40
71 Elfogadva 3ms 2284 KiB
72 Elfogadva 3ms 2460 KiB
73 Elfogadva 3ms 2672 KiB
74 Elfogadva 3ms 2884 KiB
75 Elfogadva 3ms 3092 KiB
76 Elfogadva 3ms 3324 KiB
77 Elfogadva 3ms 3416 KiB
78 Elfogadva 3ms 3404 KiB
79 Elfogadva 2ms 3400 KiB
80 Elfogadva 2ms 3404 KiB
81 Elfogadva 3ms 3384 KiB
82 Elfogadva 3ms 3384 KiB
83 Elfogadva 3ms 3472 KiB
84 Elfogadva 3ms 3608 KiB
85 Elfogadva 2ms 3688 KiB
86 Elfogadva 3ms 3688 KiB
87 Elfogadva 3ms 3688 KiB
88 Elfogadva 3ms 3824 KiB
89 Elfogadva 3ms 4028 KiB
90 Elfogadva 4ms 4820 KiB
91 Elfogadva 3ms 4756 KiB
92 Elfogadva 3ms 4788 KiB
93 Elfogadva 3ms 4712 KiB
94 Elfogadva 4ms 5000 KiB
95 Elfogadva 3ms 4964 KiB
96 Elfogadva 3ms 4900 KiB
97 Elfogadva 3ms 4896 KiB
98 Elfogadva 4ms 5196 KiB
99 Elfogadva 3ms 5184 KiB
100 Elfogadva 3ms 5316 KiB
101 Elfogadva 3ms 5284 KiB
102 Elfogadva 3ms 5316 KiB
103 Elfogadva 3ms 5340 KiB
104 Elfogadva 3ms 5312 KiB
105 Elfogadva 3ms 5348 KiB
106 Elfogadva 3ms 5344 KiB
107 Elfogadva 3ms 5596 KiB
108 Elfogadva 4ms 5484 KiB
109 Elfogadva 3ms 5512 KiB
110 Elfogadva 107ms 44084 KiB
111 Elfogadva 104ms 44248 KiB
112 Elfogadva 104ms 44136 KiB
113 Elfogadva 104ms 44160 KiB
114 Elfogadva 105ms 44184 KiB
115 Elfogadva 112ms 44144 KiB
116 Elfogadva 97ms 44160 KiB
117 Elfogadva 92ms 44124 KiB
118 Elfogadva 90ms 44096 KiB
119 Elfogadva 93ms 44096 KiB
120 Elfogadva 92ms 44108 KiB
121 Elfogadva 92ms 44096 KiB
122 Elfogadva 90ms 44096 KiB
123 Elfogadva 90ms 44136 KiB
124 Elfogadva 90ms 44136 KiB
125 Elfogadva 90ms 44280 KiB
126 Elfogadva 111ms 44096 KiB
127 Elfogadva 107ms 44100 KiB
128 Elfogadva 111ms 44096 KiB
129 Elfogadva 108ms 44112 KiB
130 Elfogadva 107ms 44240 KiB
131 Elfogadva 127ms 44124 KiB
132 Elfogadva 109ms 44128 KiB