题目比较简单. 直接把所有点的最大最小纵坐标找出来得到对称轴, 然后遍历判断每个点是否有对应的对称点就好了, 有的话就标记. 最后判断是否所有点都标记了, 有没标记的就说明不对称.
注意一点: C++ int类型最大值: 0x7fffffff, 最小值0x8000000.
还注意一点: 你写循环里面找最大最小值的时候最大最小值最初的量赋值要给写进循环啊…不然每次循环会变的…
//
// Created by Frank Yan on 2017/12/19.
//
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#include <string>
#include <vector>
#include <queue>
using namespace std;
int problem16(){
int n;
while(scanf("%d",&n)==1){
int min = 0x7fffffff;
int max = 0x80000000;
int position[n][3];
for(int i=0;i<n;i++){
cin>>position[i][0];
cin>>position[i][1];
position[i][2] = 0;
}
for(int i=0;i<n;i++){
if(position[i][1]>max)
max = position[i][1];
if(position[i][1]<min)
min = position[i][1];
}
int sym = (max+min)/2;
for(int i=0;i<n;i++){
int symy = 2*sym-position[i][1];
for(int j=0;j<n;j++)
if(position[i][0] == position[j][0]&& position[j][1]==symy)
position[i][2]=position[j][2] = 1;
}
for(int i =0;i<n;i++){
if(position[i][2]==0){
printf("NO\n");
break;
}
if(i==n-1) printf("YES\n");
}
}
}