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 }