本渣渣的想法是将 纵坐标 的绝对值作文数组下标(不会用附属下标),
把相同纵坐标绝对值的点的x坐标求和,
同时要记录abs(y)出现的次数num,
在求出abs(y)相同的对num的平均值aver1存入set中,如果是对称的 ,set的大小应该只能为1。
中间还有一步,就是x的最大值与最小值的平均值aver2要等于aver1,
同时满足set==1&&aver1==aver2,就对称
(浪费了好多内存空间,大家看看思路就行)
#include <bits/stdc++.h>
using namespace std;double a[12500]={0};
double b[12500]={0};
int main()
{
set<double>cc;
int n,j=0;
int ac;
cin>>ac;
while(ac--)
{
cin>>n;
int maxn1=-12500,maxn2=-12500,minn=12500;
for(int i=0;i<=n-1;i++)
{
int x,y;
int z1,z2;
cin>>x>>y;
z2=min(x,y);
maxn1=max(y,maxn1);
maxn2=max(x,maxn2);
minn=min(x,minn);
y=abs(y);
a[y]+=x;
b[y]++;
j++;
}
for(int i=0;i<=maxn1;i++)
{
if(b[i]!=0)
{
cc.insert(a[i]*1.0/b[i]);
}
}
// cout<<*cc.begin()<<" ";
double t=((minn+maxn2)*1.0)/2;
// cout<<t<<endl;
if(cc.size()==1&&(*cc.begin()==t))
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cc.clear();
}
return 0;
}