我用的map来判断是否每个点和其他三点距离完全相等.
#include <iostream>
#include <cstdio>
#include <map>
#include <cmath>
using namespace std;
double getDis(int x1, int x2, int y1, int y2){
return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
int x[4],y[4];
int main(){
int T, cas = 1;
scanf("%d",&T);
while(T--){
if(cas > 1)printf("\n");
map<double,bool> cnt[4];
for(int i = 0; i < 4; ++i){
scanf("%d%d",&x[i], &y[i]);
}
for(int i = 0; i < 4; ++i){
for(int j = 0; j < 4; ++j){
if(i != j){
double dis = getDis(x[i], x[j], y[i], y[j]);
cnt[i][dis] = 1;
}
}
}
int f = 1;
for(int i = 0; i < 4; ++i){
for(int j = 0; j < 4; ++j){
if(i != j){
if(cnt[i] != cnt[j]){
f = 0;
break;
}
}
}
if(!f)break;
}
printf("Case %d:\n", cas++);
if(f)printf("Yes\n");
else printf("No\n");
}
return 0;
}