poj1859The Perfect Symmetry

链接

按x或y排序,假如有对称点的话,头尾相对。

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 #include<vector>
 7 #include<cmath>
 8 #include<queue>
 9 #include<set>
10 using namespace std;
11 #define N 100000
12 #define LL long long
13 #define INF 0xfffffff
14 const double eps = 1e-8;
15 const double pi = acos(-1.0);
16 const double inf = ~0u>>2;
17 struct Point
18 {
19     double x,y;
20     Point(double x=0,double y=0):x(x),y(y) {}
21 }p[N];
22 typedef Point pointt;
23 pointt operator + (Point a,Point b)
24 {
25     return Point(a.x+b.x,a.y+b.y);
26 }
27 pointt operator - (Point a,Point b)
28 {
29     return Point(a.x-b.x,a.y-b.y);
30 }
31 int dcmp(double x)
32 {
33     if(fabs(x)<eps) return 0;
34     else return x<0?-1:1;
35 }
36 bool cmp(Point a,Point b)
37 {
38     if(dcmp(a.x-b.x)==0)
39     return a.y<b.y;
40     return a.x<b.x;
41 }
42 int main()
43 {
44     int n,i,j;
45     while(scanf("%d",&n)&&n)
46     {
47         for(i = 1; i <= n ;i++)
48         scanf("%lf%lf",&p[i].x,&p[i].y);
49         sort(p+1,p+n+1,cmp);
50         double tx = (p[1].x+p[n].x)/2,ty = (p[1].y+p[n].y)/2;
51         int flag =1 ;
52         for(i = 2 ; i <= n; i++)
53         {
54             double x = (p[i].x+p[n-i+1].x)/2;
55             double y = (p[i].y+p[n-i+1].y)/2;
56             if(dcmp(x-tx)!=0||dcmp(y-ty)!=0)
57             {
58                 flag = 0;
59                 break;
60             }
61         }
62         if(flag)
63         printf("V.I.P. should stay at (%.1f,%.1f).\n",tx,ty);
64         else
65         printf("This is a dangerous situation!\n");
66     }
67     return 0;
68 }
View Code
posted @ 2014-07-18 10:29  _雨  阅读(158)  评论(0编辑  收藏  举报