题意:给出平面上N(N<=1000)个点,问是否可以找到一条竖线(即x=?),使得所有点左右对称。
思路:把这些点存一下。如果存在,那么x * 2 =(最左边点的x坐标 + 最右边点的x坐标),然后判断每一个点的对称点是否存在即可(暴力遍历,或者用set的判重函数都行)。
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
scanf("%d", &n);
int MIN = 99999, MAX = -99999;
set<pair<int,int> > s;
for (int i = 0; i < n; i++)
{
int x,y;
scanf ("%d%d", &x, &y);
MIN = min(MIN, x);
MAX = max(MAX, x);
s.insert(make_pair(x, y));
}
int x = MIN + MAX;
bool flag = true;
for (auto i: s)
{
if(!s.count(make_pair(x - i.first, i.second))) { flag = false; break; }
}
if (flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}