Clarke and five-pointed star
阿新 • • 發佈:2017-07-30
using wid sam poi tput test case -1 out sin 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.
InputThe first line contains an integer T(1≤T≤10)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)xi,yi(?109≤xi,yi≤109), denoting the coordinate of this point.OutputTwo numbers are equal if and only if the difference between them is less than 10?410?4.
For each test case, print YesYes if they can compose a five-pointed star. Otherwise, print NoNo. (If 5 points are the same, print YesYes. )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 No
Hint
我想了下,感覺這道題做法很多啊,判邊判點的,但是一想還是覺得判邊比較輕松,只要考率裏面五條邊相等,外面五條邊相等就好了
#include<bits/stdc++.h> using namespace std; int main() { int T,i,j; double x[5],y[5],a[15]; scanf("%d",&T); while(T--) { for(i=0; i<5; i++) scanf("%lf%lf",&x[i],&y[i]); int t=0,f=1; for(i=0; i<5; i++) for(j=0; j<i; j++) a[t++]=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]); sort(a,a+t); for(i=0; i<9; i++) if(i!=4&&fabs(a[i]-a[i+1])>0.0001) f=0; printf("%s\n",f?"Yes":"No"); } return 0; }
Clarke and five-pointed star