hdoj--5563--Clarke and five-pointed star(简单几何)
Clarke and five-pointed star
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 601 Accepted Submission(s): 322
Total Submission(s): 601 Accepted Submission(s): 322
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 numbersxi,yi(−109≤xi,yi≤109) ,
 denoting the coordinate of this point. 
For each test case, 5 lines follow. Each line contains 2 real numbers
Output
Two numbers are equal if and only if the difference between them is less than
10−4 .
For each test case, printYes 
 if they can compose a five-pointed star. Otherwise, print 
No .
 (If 5 points are the same, print Yes .
 )
For each test case, print
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
Recommend
五角星是一个对称性极高的图形,每一个点连得线都与其他点的连线一毛一样,有木有很神奇(并没有),这道题只需要算出每一个点的所有连线,然后判断就好,水题一枚
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct node
{
	double x,y;
}p[10010];
double dis1[10],dis2[10],dis3[10],dis4[10],dis5[10];
double d(node s1,node s2)
{
	return sqrt((s1.x-s2.x)*(s1.x-s2.x)+(s1.y-s2.y)*(s1.y-s2.y));
}
int cmp(double a,double b)
{
	if(a>b)
	return 1;
	return 0;
}
int er(double a,double b)
{
	if(fabs(a-b)<1e-3)
	return 1;
	return 0;
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int i,j;
		for(i=0;i<5;i++)
		scanf("%lf%lf",&p[i].x,&p[i].y);
		for(j=0;j<5;j++)
		dis1[j]=d(p[0],p[j]);
		for(j=0;j<5;j++)
		dis2[j]=d(p[1],p[j]);
		for(j=0;j<5;j++)
		dis3[j]=d(p[2],p[j]);
		for(j=0;j<5;j++)
		dis4[j]=d(p[3],p[j]);
		for(j=0;j<5;j++)
		dis5[j]=d(p[4],p[j]);
		sort(dis1,dis1+5,cmp);
		sort(dis2,dis2+5,cmp);
		sort(dis3,dis3+5,cmp);
		sort(dis4,dis4+5,cmp);
		sort(dis5,dis5+5,cmp);
		for(i=0;i<5;i++)
		{
			if(er(dis1[i],dis2[i])&&
				er(dis2[i],dis3[i])&&
				er(dis3[i],dis4[i])&&
				er(dis4[i],dis5[i])&&
				er(dis5[i],dis1[i]));
			else break;
		}
		if(i==5)
		printf("Yes\n");
		else
		printf("No\n");
	}
	return 0; 
} 
                    
                     
                    
                 
                    
                
 
 
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号