求凸包后枚举凸包上的点
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111 |
#include <cstdio>#include <cstdlib>#include <cmath>#include <map>#include <set>#include <queue>#include <stack>#include <vector>#include <sstream>#include <string>#include <cstring>#include <algorithm>#include <iostream>#define maxn 100010#define INF 0x7fffffff#define inf 100000000#define MOD 1000000007#define ULL unsigned long long#define LL long longusing
namespace std;const
double ESP = 1e-10;double
add(double
a, double
b) { if(abs(a+b) < ESP * (abs(a) + abs(b))) return
0; return
a+b;}struct
P{ double
x, y; P() {} P(double
x, double
y) : x(x), y(y) {} P operator - (P p) { return
P(add(x, -p.x), add(y, -p.y)); } P operator + (P p) { return
P(add(x, p.x), add(y, p.y)); } P operator * (double
d) { return
P(x*d, y*d); } double
dot(P p) { return
add(x*p.x, y*p.y); } double
det(P p) { return
add(x*p.y, - y*p.x); }};P ps[maxn];int
n;bool
cmp_x(const
P& p, const
P& q) { if(p.x != q.x) return
p.x < q.x; return
p.y < q.y;}vector<P> convex_full() { sort(ps, ps+n, cmp_x); int
k = 0; vector<P> qs(n*2); for(int
i = 0; i < n; ++ i) { while(k > 1 && (qs[k-1] - qs[k-2]).det(ps[i] - qs[k-1]) <= 0) -- k; qs[k++] = ps[i]; } for(int
i = n-2, t = k; i >= 0; -- i) { while(k > t && (qs[k-1] - qs[k-2]).det(ps[i] - qs[k-1]) <= 0) -- k; qs[k++] = ps[i]; } qs.resize(k-1); return
qs;}double
dist(P p, P q) { return
(p-q).dot(p-q);}void
solve() { vector<P> qs = convex_full(); // printf("%d\n", qs.size()); double
res = 0; for(int
i = 0; i < (int)qs.size(); ++ i) { for(int
j = 0; j < i; ++ j) { res = max(res, dist(qs[i], qs[j])); } } printf("%.0lf\n", res);}int
main(){ while(scanf("%d", &n) == 1) { for(int
i = 0; i < n; ++ i) { scanf("%lf%lf", &ps[i].x, &ps[i].y); } solve(); } return
0;} |
原文:http://www.cnblogs.com/avema/p/3774487.html