题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=577&pid=1001
题面:
Four Inages Strategy
Accepts: 272
Submissions: 1374
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
题意:
给定空间四个点,判断四个点是否组成了一个正方形。
解法:
比较笨的考虑了四个点的全部位置分布,不过比较安全。先判断对角线相等, 邻边相等,再加邻边垂直。
代码:
#include <iostream>
#include <string>
#include <cstring>
int store[26],tmp[26];
using namespace std;
int squared_dis(int a,int b,int c,int d,int e,int f)
{
return (a-d)*(a-d)+(b-e)*(b-e)+(c-f)*(c-f);
}
int main()
{
int n,x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4;
cin>>n;
for(int i=1;i<=n;i++)
{
bool flag=false;
cin>>x1>>y1>>z1>>x2>>y2>>z2>>x3>>y3>>z3>>x4>>y4>>z4;
if(squared_dis(x1,y1,z1,x3,y3,z3)==squared_dis(x2,y2,z2,x4,y4,z4))
{
if(squared_dis(x2,y2,z2,x3,y3,z3)==squared_dis(x1,y1,z1,x2,y2,z2))
{
if((x4-x1)*(x2-x1)+(y4-y1)*(y2-y1)+(z4-z1)*(z2-z1)==0)
flag=true;
}
}
if(squared_dis(x1,y1,z1,x2,y2,z2)==squared_dis(x3,y3,z3,x4,y4,z4))
{
if(squared_dis(x2,y2,z2,x3,y3,z3)==squared_dis(x1,y1,z1,x3,y3,z3))
{
if((x4-x1)*(x3-x1)+(y4-y1)*(y3-y1)+(z4-z1)*(z3-z1)==0)
flag=true;
}
}
if(squared_dis(x1,y1,z1,x4,y4,z4)==squared_dis(x2,y2,z2,x3,y3,z3))
{
if(squared_dis(x2,y2,z2,x1,y1,z1)==squared_dis(x1,y1,z1,x3,y3,z3))
{
if((x3-x1)*(x2-x1)+(y3-y1)*(y2-y1)+(z3-z1)*(z2-z1)==0)
flag=true;
}
}
cout<<"Case #"<<i<<": ";
if(flag)cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}