Lan Xiang's Square
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
0
- 描述
-
Excavator technology which is strong, fast to Shandong to find Lan Xiang.
Then the question comes.. :)
for this problem , i will give you four points. you just judge if they can form a square.
if they can, print "Yes", else print "No".
Easy ? just AC it.
- 输入
-
T <= 105 cases.
for every case
four points, and every point is a grid point .-10^8 <= all interger <= 10^8。
grid point is both x and y are interger. - 输出
- Yes or No
- 样例输入
-
11 1-1 1-1 -11 -1
- 样例输出
-
Yes
-
这道题目的一个坑点在于考虑到任意一条边为零的情况,如果任意一条边为零,都不能构成一个正方形。本人的思路是先对输入的四个点中固定一个点,求其与另外三个点的距离,如果其中存在任意两个相同,再看另外一条边是否是这两条相同的边的根号2倍,如果是,根据这个点,求出他与另外两个与固定点距离相同的点的距离,如果这四条边的距离相同,那么说明这是个正方形。(求边的距离时记得不要用sqrt,这样会丢失精度)。
/*边为零的情况一定要考虑,任意一边为零都不能构成正方形*/ #include<stdio.h> #include<math.h> #include<stdlib.h> int main() { double number1[4][2]={0}; double sum1,sum2,sum3,sum4,sum,t; int n,i; scanf("%d",&n); while(n--) { for(i=0;i<4;i++) scanf("%lf %lf",&number1[i][0],&number1[i][1]); sum1=fabs(pow((number1[1][0]-number1[0][0]),2)+pow((number1[1][1]-number1[0][1]),2)); sum2=fabs(pow((number1[2][0]-number1[0][0]),2)+pow((number1[2][1]-number1[0][1]),2)); sum=fabs(pow((number1[3][0]-number1[0][0]),2)+pow((number1[3][1]-number1[0][1]),2)); if(sum1&&sum2&&sum)/*考虑边为零的情况*/ { if((sum1==sum2)||(sum1==sum)||(sum2==sum)) { if(sum1==sum2) { t=sum1*2; if(t==sum) { sum3=fabs(pow((number1[3][0]-number1[1][0]),2)+pow((number1[3][1]-number1[1][1]),2)); sum4=fabs(pow((number1[3][0]-number1[2][0]),2)+pow((number1[3][1]-number1[2][1]),2)); if((sum1==sum2)&&(sum2==sum3)&&(sum3==sum4))/*正方形的四条边相同*/ printf("Yes\n"); else printf("No\n"); } else printf("No\n"); } if(sum1==sum) { t=sum1*2; if(t==sum2) { sum3=fabs(pow((number1[2][0]-number1[1][0]),2)+pow((number1[2][1]-number1[1][1]),2)); sum4=fabs(pow((number1[2][0]-number1[3][0]),2)+pow((number1[2][1]-number1[3][1]),2)); if((sum1==sum)&&(sum==sum3)&&(sum3==sum4)) printf("Yes\n"); else printf("No\n"); } else printf("No\n"); } if(sum==sum2) { t=sum*2; if(t==sum1) { sum3=fabs(pow((number1[1][0]-number1[2][0]),2)+pow((number1[1][1]-number1[2][1]),2)); sum4=fabs(pow((number1[1][0]-number1[3][0]),2)+pow((number1[1][1]-number1[3][1]),2)); if((sum2==sum)&&(sum2==sum3)&&(sum3==sum4)) printf("Yes\n"); else printf("No\n"); } else printf("No\n"); } } else printf("No\n"); } else printf("No\n"); } return 0; }