题意:给出n个点的坐标(xi,yi)问是否存在一条竖线是他们的对称轴
思路:若存在对称轴 x= c,则必定有 c = ∑ xi / n
只需每个xi小于c的点有一个关于c对称的点,就说明对称轴存在
这样除出来会有浮点数而这题数据恰好会卡这东西,所以把c和各个点的坐标都乘n就可以全都变成整数啦~
代码:
#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> wocao;
wocao pp[1005];
set<wocao> a;
int main()
{
int t, n;
cin>>t;
while(t--)
{
a.clear();
cin>>n;
int sum = 0;
for(int i = 0; i < n; ++i)
{
int x, y;
cin>>x>>y;
pp[i] = make_pair(x*n, y*n);
a.insert(pp[i]);
sum+=x;
}
int duichenzhou = sum;
bool judge = 1;
for(int i = 0; i < n; ++i)
{
if(pp[i].first>=duichenzhou)
continue;
int d = duichenzhou - pp[i].first;
wocao nima = make_pair(pp[i].first + 2 * d, pp[i].second);
if(a.find(nima)==a.end())
{
judge = 0;
break;
}
}
if(judge)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}