题目大意:寻找散的点有没有对称轴。
思路:用map<int,set<int> > 是因为同一个坐标可能有不同的纵坐标。
从最前和最后开始扫,判断他们的对称轴和点的纵坐标是否相同。在对称轴上的点可以不判断。
#include <bits/stdc++.h>
using namespace std;
#define maxn 1005
#define EPS 1e-9
map<int,set<int> > data;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
data.clear();
int n;
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
int a,b;
scanf("%d%d",&a,&b);
if(data.count(a))
data[a].insert(b);
else
{
set<int> temp;
temp.insert(b);
data[a] = temp;
}
}
int flag = 1;
map<int,set<int> > :: iterator it = data.begin(),th = data.end();
th--;
int mid = it->first + th->first;
while(it != th)
{
int mtest = it->first + th->first;
if(mtest != mid) {flag = 0;break;}
set<int> a = it->second,b = th->second;
set<int>::iterator ait = a.begin(),bit = b.begin();
for(; ait != a.end(); ait++)
{
if(*ait != *bit)
{
flag = 0;break;
}
bit++;
}
if(!flag) break;
it++;
if(it==th) break;
th--;
}
flag == 0 ? printf("NO\n") : printf("YES\n");
}
return 0;
}