zoukankan      html  css  js  c++  java
  • hdu1392凸包裸题

     1 //极角排序
     2 #include <bits/stdc++.h>
     3 #define sqr(x) ((x)*(x))
     4 using namespace std;
     5 int n,st[200001],top;
     6 struct POI
     7 {
     8     int x,y;
     9     POI()
    10     {
    11         x=y=0;
    12     }
    13     POI(int _x,int _y)
    14     {
    15         x=_x;y=_y;
    16     }
    17 } p[200001];
    18 int cross(POI x,POI y)
    19 {
    20     return x.x*y.y-x.y*y.x;
    21 }
    22 double dis(POI x,POI y)
    23 {
    24     return sqrt(sqr(x.x-y.x)+sqr(x.y-y.y));
    25 }
    26 POI operator-(POI x,POI y)
    27 {
    28     return POI(x.x-y.x,x.y-y.y);
    29 }
    30 bool com(POI x,POI y)
    31 {
    32     return(cross(x-p[1],y-p[1])>0 || cross(x-p[1],y-p[1])==0 && dis(x,p[1])<dis(y,p[1]));
    33 }
    34 int main()
    35 {
    36     for(scanf("%d",&n);n;scanf("%d",&n))
    37     {
    38         for(int i=1;i<=n;i++)
    39             scanf("%d%d",&p[i].x,&p[i].y);
    40         if(n==2)//wtf 
    41         {
    42             printf("%.2f
    ",dis(p[1],p[2]));
    43             continue;
    44         }
    45         int id=1;
    46         for(int i=2;i<=n;i++)
    47             if(p[i].x<p[id].x || p[i].x==p[id].x && p[i].y<p[id].y) id=i;
    48         swap(p[1],p[id]);
    49         sort(p+2,p+n+1,com);
    50         st[top=1]=st[0]=1;
    51         for(int i=2;i<=n;i++)
    52         {
    53             while(top && cross(p[st[top]]-p[st[top-1]],p[i]-p[st[top]])<0) --top;
    54             st[++top]=i;
    55         }
    56         double len=0;
    57 //        puts("");
    58 //        for(int i=1;i<=top;i++)
    59 //            printf("%d %d
    ",p[st[i]].x,p[st[i]].y);
    60         st[++top]=1;
    61         for(int i=1;i<top;i++)
    62             len+=dis(p[st[i]],p[st[i+1]]);
    63         printf("%.2f
    ",len);
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    正则匹配英文和数字
    python 正则匹配小数
    Error loading MySQLdb module: No module named 'MySQLdb'
    使用STL的next_permutation函数
    C++模板类之pair
    【转】Java迭代:Iterator和Iterable接口
    经典DFS问题实践
    Java 算法(背包,队列和栈)
    深度学习caffe测试代码c++
    opencv测试代码
  • 原文地址:https://www.cnblogs.com/wanglichao/p/7141875.html
Copyright © 2011-2022 走看看