
题解:
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
int main() {
vector<pair<int, int>> points(4);
for (int i = 0; i < 4; ++i) {
int x, y;
cin >> x >> y;
points[i] = {x, y};
}
// 检查是否有重复点
set<pair<int, int>> unique_points(points.begin(), points.end());
if (unique_points.size() != 4) {
cout << "N" << endl;
return 0;
}
// 计算所有六对点的距离平方
vector<long long> distSq;
for (int i = 0; i < 4; ++i) {
for (int j = i + 1; j < 4; ++j) {
long long dx = points[i].first - points[j].first;
long long dy = points[i].second - points[j].second;
distSq.push_back(dx * dx + dy * dy);
}
}
sort(distSq.begin(), distSq.end());
// 判断条件:前四个相等,后两个相等且是前者的两倍
if (distSq[0] == distSq[1] && distSq[1] == distSq[2] && distSq[2] == distSq[3] &&
distSq[4] == distSq[5] && distSq[4] == 2 * distSq[0]) {
cout << "Y" << endl;
} else {
cout << "N" << endl;
}
return 0;
}