题目大意:有很多坐标,现在让你判断这些坐标可不可以根据某条平行于y轴的线对称。
思路:首先要求出那条线的x轴坐标,可与i根据最小的x和最大的x ,也可以把所有x加起来求平均值。
所有数据放到set中,判断每个点有没有对称点。(直接求平均值可能会有小数,参考了某位大佬的代码,给a*n,这样就不需要给和除n了。
#include<iostream>
#include<set>
#include<map>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int num=0;
set<pair<int,int> > s;
for(int i=0;i<n;i++){
int a,b;
cin>>a>>b;
num+=a;
s.insert(pair<int,int>(a*n,b));
}
bool flag=true;
for(set<pair<int,int> >::iterator i=s.begin();i!=s.end();i++){
if(s.find(pair<int,int>(2*num-i->first,i->second))==s.end()){
flag=false;
break;
}
}
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}