计算几何之凸包

      本来弄了个独立博客,想用那个的,不习惯,还是用博客园吧。那个留着吓弄吧。

      在家了4天,玩了3天半,那半天学会凸包,临走回家,拿了两本书,C++ primer和黑书,还有浙大的模板,天天玩,这是要跪的节奏啊。

      学凸包,黑书上讲的特好。。。

      凸包,原来以为听高端的。其实,也不难的。看着黑书,和浙大模板,把POJ计划上凸包两个题,秒掉应该是没有问题的。我看那个版本的浙大模板有点问题,没有考虑所有的点都共线的情况。

      期间一场CF,让我给睡过去了,scf在家做了,我好惭愧。。。回家了就是想睡觉额。。。

      POJ 2187 Beauty Contest 凸包之后,求最远点距离平方,1113跟这个一模一样,就是加上一个圆的周长(智商拙计额)。。

 1 #include <iostream>//POJ 2187
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 using namespace std;
 7 #define LL __int64
 8 #define N 50001
 9 #define eps 1e-6
10 struct Point
11 {
12     int x,y;
13 } p[N];
14 int s[N];
15 int top,n;
16 int det(int x1,int y1,int x2,int y2)
17 {
18     return x1*y2 - x2*y1;
19 }
20 int cross(Point a,Point b,Point c)//线段ac与线段bc叉积
21 {
22     return det(a.x - c.x,a.y - c.y,b.x - c.x,b.y - c.y);
23 }
24 int dis(Point a,Point b)
25 {
26     return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
27 }
28 bool cmp(Point a,Point b)
29 {
30     double t;
31     t = cross(a,b,p[0]);
32     if(t > 0||(t == 0&&dis(a,p[0]) < dis(b,p[0])))
33         return true;
34     else
35         return false;
36 }
37 
38 int main()
39 {
40     int i,maxz,j;
41     Point temp;
42     scanf("%d",&n);
43     for(i = 0; i < n; i ++)
44     {
45         scanf("%d%d",&p[i].x,&p[i].y);
46         if((p[i].y < p[0].y)||(p[i].y == p[0].y&&p[i].x < p[0].x))
47         {
48             temp = p[i];
49             p[i] = p[0];
50             p[0] = temp;
51         }
52     }
53     sort(p+1,p+n,cmp);
54     for(i = 0; i < 3; i ++)
55     {
56         s[i] = i;
57     }
58     top = 2;
59     for(i = 3; i < n; i ++)
60     {
61         while(top >= 1&&cross(p[i],p[s[top]],p[s[top-1]]) >= 0)
62             top -- ;
63         s[++top] = i;
64     }
65     maxz = 0;
66     for(i = 0;i <= top;i ++)
67     {
68         for(j = 0;j <= top;j ++)
69         {
70             if(maxz < dis(p[s[i]],p[s[j]]))
71             maxz = dis(p[s[i]],p[s[j]]);
72         }
73     }
74     printf("%d\n",maxz);
75     return 0;
76 }

 

posted @ 2013-02-04 22:38  Naix_x  阅读(289)  评论(2编辑  收藏  举报