• poj 1696


    不错的一题,需要极角排序,看了别人的代码做的。。。。。。计算几何啊~~~

    View Code
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 #include <algorithm>
     5 
     6 const double er = 1e-8;
     7 struct point
     8 {
     9     int index;
    10     int x,y;
    11 }p[100];
    12 int n;
    13 int res;
    14 
    15 int dis(point a,point b)
    16 {
    17     return sqrt(1.0*(a.x - b.x) * (a.x - b.x) + 1.0*(a.y - b.y)*(a.y - b.y));
    18 }
    19 
    20 double outer_product(point a,point b,point c)
    21 {
    22     return (b.x - a.x) * (c.y - a.y) - (b.y - a.y)*(c.x-a.x);
    23 }
    24 
    25 bool cmp(point a,point b)
    26 {
    27     double temp = outer_product(p[res - 1],a,b);
    28     if(temp > er) return true;
    29     temp = temp > 0?temp:(-temp);
    30     if(temp < er&&dis(a,p[res - 1]) < dis(b,p[res -1]))
    31         return true;
    32     return false;
    33 }
    34 
    35 int main()
    36 {
    37     int cas;
    38     scanf("%d",&cas);
    39     while(cas --)
    40     {
    41         scanf("%d",&n);
    42         for(int i = 0;i < n;i ++)
    43         {
    44             scanf("%d%d%d",&p[i].index,&p[i].x,&p[i].y);
    45             if(p[i].y < p[0].y) std::swap(p[i],p[0]);
    46             if(p[i].y == p[0].y)
    47             {
    48                 if(p[i].x <p[0].x)
    49                     std::swap(p[i],p[0]);
    50             }
    51         }
    52         printf("%d %d",n,p[0].index);
    53 
    54         for(res = 1;res < n;res ++)
    55         {
    56             std::sort(p+res,p+n,cmp);
    57             printf(" %d",p[res].index);
    58         }
    59         printf("\n");
    60     }
    61 
    62     return 0;
    63 }
  • 相关阅读:
    类成员函数的重载、覆盖和隐藏区别 (C++)(转)
    man时括号里的数字是啥意思
    Redis事务
    功能接口
    持久化方式
    宿主
    路由
    静态文件
    Log4Net 配置
    Redis命令与配置
  • 原文地址:https://www.cnblogs.com/Shirlies/p/2443518.html
Copyright © 2020-2023  润新知