UVA1595(对称轴)。

最近在上别的课,没时间深入学c++和数据结构,所以专门挑了一些简单题练练手。

按照横坐标排序,找出对称轴,然后枚举每个点是否关于这条直线对称;

如果不对称把横坐标存入数组,如果这个店不在对称轴上面的话就输出NO。

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstdlib>
 5 #include <cmath>
 6 #include <cstring>
 7 
 8 using namespace std;
 9 
10 typedef struct point
11 {
12     int x,y;
13 };
14 int cmpa(const void *a,const void *b)
15 {
16     struct point* pa = (struct point*)a;
17     struct point* pb = (struct point*)b;
18     return pa->x-pb->x;
19 }
20 int cmpa2(const void *a,const void *b)
21 {
22     struct point* pa = (struct point*)a;
23     struct point* pb = (struct point*)b;
24     return pa->y-pb->y;
25 }
26 int main()
27 {
28     int m,n,i,j,k,t;
29     point a[1010];
30     int book[20020];
31     scanf("%d",&t);
32     while(t--)
33     {
34         scanf("%d",&n);
35         memset(book,0,sizeof(book));
36         for(i=0; i<n; i++)
37         {
38             scanf("%d%d",&a[i].x,&a[i].y);
39         }
40         qsort(a,n,sizeof(a[0]),cmpa);
41         int mid = a[0].x+a[n-1].x;
42         int flag1 = 1;
43         k=0;
44         for(i=0; i<n; i++)
45         {
46             int flag = 1;
47             for(j=0; j<n; j++)
48             {
49                 if(a[i].x+a[j].x==mid&&a[i].y==a[j].y&&i!=j)
50                 {
51                     flag=0;
52                     break;
53                 }
54             }
55             if(flag==1)
56             {
57                 book[k++]=a[i].x;
58             }
59         }
60         for(i=0; i<k; i++)
61         {
62             if(book[i]*2!=mid)
63             {
64                 flag1=0;
65                 break;
66             }
67         }
68         if(flag1)
69             printf("YES\n");
70         else
71             printf("NO\n")
72     }
73     return 0;
74 }

 

posted @ 2017-01-12 11:42  萧萧Hsiao  阅读(1096)  评论(0编辑  收藏  举报