Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 351 Accepted Submission(s): 197
When he did a research with polygons, he found he has to judge if the polygon is a five-pointed star at many times. There are 5 points on a plane, he wants to know if a five-pointed star existed with 5 points given.
For each test case, 5 lines follow. Each line contains 2 real numbers xi,yi(−109≤xi,yi≤109), denoting the coordinate of this point.
For each test case, print Yes if they can compose a five-pointed star. Otherwise, print No. (If 5 points are the same, print Yes. )
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define PI acos(-1)
int cmp(const void *a, const void *b){
return *(double *)a > *(double *)b ? 1 : -1;
}
int main(){
int T;
scanf("%d", &T);
while(T--){
double x[5], y[5];
int i, j;
int count = 0;
double hehe, hoho;
for(i = 0; i < 5; i++) scanf("%lf%lf", &x[i], &y[i]); //保存下五个点的数据
for(i = 0; i < 5; i++){
double dis[5]; //操作当前点
for(j = 0; j < 5; j++){
dis[j] = sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]));
}
qsort(dis, 5, sizeof(double), cmp); //排序找到距离当前点最远的点
double dismax;
dismax = dis[4];
if(count == 0) hehe = dismax;
if(-0.0001 < hehe - dismax && hehe - dismax < 0.0001) count++;
hehe = dismax;
}
if(count == 5) printf("Yes\n"); //五条边相等
else printf("No\n");
}
return 0;
}