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

你可能感兴趣的:(poj)