对称轴,刚开始写的时候直接按顺序加的,这就导致当出现两个以上y相等的时候会NO。后来我有把y相等全部拿出来,第一个和最后一个相加除二,A了。
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
struct Point{
double x, y;
};
set<double> if_count;
vector<Point> all_p;
bool cmp_y(Point a, Point b) {
if(a.y != b.y)
return a.y < b.y;
return a.x < b.x;
}
void judge_count(int star, int en) {
if(star <= en) {
judge_count(star + 1, en - 1);
if_count.insert((all_p[star].x + all_p[en].x) / 2);
}
}
int main() {
int T;
cin >> T;
while(T--) {
int N, beg = 0, last = 0;
cin >> N;
while(N--) {
Point p;
cin >> p.x >> p.y;
all_p.push_back(p);
}
sort(all_p.begin(), all_p.end(), cmp_y);
for(int i = 1; i < all_p.size(); i++) {
if(all_p[i].y == all_p[i - 1].y)
last++;
else {
judge_count(beg, last);
beg = last = i;
}
}
judge_count(beg, last);
if_count.size() == 1 ? cout << "YES" << endl : cout << "NO" << endl;
if_count.clear();
all_p.clear();
}
return 0;
}