Clarke and five-pointed star
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 420 Accepted Submission(s): 227
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题意:给你5个点,求这5个点能不能连成一个正五角星 思路:见每个点都连起来会发现,会组成一个五边形,而正五角星组成的是正五边形,所一说此题就转化为判断是否 能组成正五边形直接枚举距离,正多边形个点之间的连线中边长一定是最短的那条边,所以我们只需要查看最短边数 量是否等于5就可以判断是不是正五边形,也就能判断能不能组成正五角星。需要注意的是精度问题。可能这道题数 据有点弱,窝水了过去,正式的应该是先求凸包,然后在判断,但是可能因为精度问题水了过去。。 类似的题有:点击打开链接 ac代码:<pre name="code" class="cpp">#include<stdio.h> #include<string.h> #include<math.h> #include<stack> #include<iostream> #include<algorithm> #define fab(a) (a)>0?(a):(-a) #define LL long long #define MAXN 1000010 #define mem(x) memset(x,0,sizeof(x)) #define INF 0xfffffff using namespace std; struct s { double x,y; }a[10]; int v[10][10]; double dis[1000]; double fun(s aa,s bb) { return sqrt((aa.x-bb.x)*(aa.x-bb.x)+(aa.y-bb.y)*(aa.y-bb.y)); } int main() { int t,i,j; scanf("%d",&t); while(t--) { for(i=0;i<5;i++) scanf("%lf%lf",&a[i].x,&a[i].y); mem(v); int k=0; double mi=1.0*INF; for(i=0;i<5;i++) { for(j=i+1;j<5;j++) { if(v[i][j]||v[j][i]) continue; dis[k]=fun(a[i],a[j]); mi=min(mi,dis[k]); v[i][j]=1; k++; } } int cnt=0; for(i=0;i<k;i++) { if(dis[i]-mi<=1e-4)//精度问题 cnt++; } if(cnt==5) printf("Yes\n"); else printf("No\n"); } return 0; }