Clarke and five-pointed star
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 472 Accepted Submission(s): 249
Problem Description
Clarke is a patient with multiple personality disorder. One day, Clarke turned into a learner of geometric.
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.
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.
Input
The first line contains an integer
T(1≤T≤10)
, the number of the test cases.
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, 5 lines follow. Each line contains 2 real numbers xi,yi(−109≤xi,yi≤109) , denoting the coordinate of this point.
Output
Two numbers are equal if and only if the difference between them is less than
10−4
.
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 . )
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 . )
Sample Input
2 3.0000000 0.0000000 0.9270509 2.8531695 0.9270509 -2.8531695 -2.4270509 1.7633557 -2.4270509 -1.7633557 3.0000000 1.0000000 0.9270509 2.8531695 0.9270509 -2.8531695 -2.4270509 1.7633557 -2.4270509 -1.7633557
Sample Output
Yes NoHint
Source
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
double length[5][5];
double point[5][2];
const double MIN=1e-4;
int main(){
int t,i,j;
scanf("%d",&t);
while(t--){
bool ok=1;
for(i=0;i<5;i++)
scanf("%lf%lf",&point[i][0],&point[i][1]);
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(i==j){
length[i][j]=0.0;
continue;
}
length[i][j]=(point[i][0]-point[j][0])*
(point[i][0]-point[j][0])+(point[i][1]-point[j][1])*
(point[i][1]-point[j][1]);
}
sort(length[i],length[i]+5);
}
/* for(i=0;i<5;i++){
printf("%0.6lf\n",length[i][1]);
}*/
for(i=1;i<5;i++){
//printf("%0.6lf\n",fabs(length[0][1]-length[i][1]));
if(fabs(length[0][1]-length[i][1])>MIN)
ok=0;
}
if(ok)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}