题目链接
题意
给出平面上n个点,问是否存在这样的一条竖线,使得所有点左右对称
解决
- 根据所有点的横坐标之和求出平均值,即为竖线的水平位置
- 输入的时候把点存在自定义结构体的set中
- 遍历每一个点,看是否能在set中查找到关于竖线对称的点,找不到的话就不存在
struct point
{
int x,y;
point(){}
point(int xx,int yy)
{
x=xx;y=yy;
}
//如果使用自定义结构体的set,需要重载小于号
bool operator<(const point &p2)const
{
if(x==p2.x) return y<p2.y;
else return x<p2.x;
}
};
int main()
{
//open();
int cases;
scanf("%d",&cases);
while(cases--)
{
set<point> myset;
int n,a,b;
double sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&a,&b);
sum+=a;
myset.insert(point(a,b));
}
sum/=n;
bool ok=true;
set<point>::iterator it;
set<point>::iterator it2;
for(it=myset.begin();it!=myset.end();it++)
{
point ans=*it;
point aim(2*sum-ans.x,ans.y);
it2=myset.find(aim);
if(it2==myset.end()) //找不到的话find返回end
{
ok=false;
break;
}
}
if(ok) puts("YES");
else puts("NO");
}
}