题目大意:有很多坐标,现在让你判断这些坐标可不可以根据某条平行于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;
}
本文介绍了一种用于判断一组坐标是否能围绕一条平行于y轴的直线对称的算法。该算法首先计算所有坐标x轴值的总和并利用这个值来确定对称轴的位置。之后通过检查每一对对称点是否存在来验证整体的对称性。
1366

被折叠的 条评论
为什么被折叠?



