HDU 5206 BC Four Inages Strategy

来源:互联网 发布:teamviewer mac版12.0 编辑:程序博客网 时间:2024/05/16 18:10

题意:给你四个空间坐标点,让你判断这四个点可以围成一个正方形吗?如果是,输出Yes,否则输出No


想法就是枚举  两两之间的距离,4个点就有6个距离,然后从小到大排序 ,前面的4个必须要相等,是四边形的四条边,最后两个较大边也必须要相等,是两条对角线

#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int main(){    int t;    scanf("%d",&t);        long long a[10][10];    long long ans[50];//需要用long long         for(int l=1; l<=t; l++)    {        int cnt=0;        int flag=0;        for(int i=0; i<4; i++)        {            for(int j=0; j<3; j++)            {                scanf("%lld",&a[i][j]);            }        }        for(int i=0; i<4; i++)        {            for(int j=i+1; j<4; j++)            {                long long s=(a[i][0]-a[j][0])*(a[i][0]-a[j][0])+(a[i][1]-a[j][1])*(a[i][1]-a[j][1])+(a[i][2]-a[j][2])*(a[i][2]-a[j][2]);                ans[cnt++]=s;            }        }        sort(ans,ans+cnt);        long long ss=ans[3]*2;//上面开平方的话需要用double ,就该是ans[3]*sqrt(2);但是没有必要。        for(int i=0; i<3; i++)        {            if(ans[i]!=ans[i+1])            {                flag=1;            }        }        for(int i=4; i<6; i++)        {            if(ss!=ans[i])                flag=1;        }        printf("Case #%d: ",l);        if(flag==0)            printf("Yes\n");        else            printf("No\n");    }}


0 0
原创粉丝点击