标签:
中文题目:《四象阵法》
判断空间四点能否组成正方形。
一次AC,好激动~
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <cmath> typedef long long ll; using namespace std; struct point{ int x,y,z; }; bool isequal(point p1,point p2,point p3,point p4){ int a=pow(p2.x-p1.x , 2)+pow(p2.y-p1.y,2)+pow(p2.z-p1.z,2); int b=pow(p4.x-p3.x , 2)+pow(p4.y-p3.y,2)+pow(p4.z-p3.z,2); return a==b; } bool isvertical(point p1,point p2,point p3,point p4){ p1.x=p2.x-p1.x; p1.y=p2.y-p1.y; p1.z=p2.z-p1.z; p3.x=p4.x-p3.x; p3.y=p4.y-p3.y; p3.z=p4.z-p3.z; int a=p1.x*p3.x+p1.y*p3.y+p1.z*p3.z; return a==0; } bool istar(point p1,point p2,point p3,point p4){ if(p2.x+p3.x-p1.x != p4.x)return false; if(p2.y+p3.y-p1.y != p4.y)return false; if(p2.z+p3.z-p1.z != p4.z)return false; return true; } int main() { point p[5]; int t; scanf("%d",&t); for(int cs=1;cs<=t;cs++){ printf("Case #%d: ",cs ); for(int i=1;i<=4;++i){ scanf("%d",&p[i].x); scanf("%d",&p[i].y); scanf("%d",&p[i].z); } if( isequal(p[1],p[2],p[1],p[3]) && isvertical(p[1],p[2],p[1],p[3]) ){ if( istar(p[1],p[2],p[3],p[4]) )printf("Yes\n"); }else if( isequal(p[1],p[2],p[1],p[4]) && isvertical(p[1],p[2],p[1],p[4]) ){ if( istar(p[1],p[2],p[4],p[3]) )printf("Yes\n"); }else if( isequal(p[1],p[3],p[1],p[4]) && isvertical(p[1],p[3],p[1],p[4]) ){ if( istar(p[1],p[3],p[4],p[2]) )printf("Yes\n"); }else{ printf("No\n"); } } return 0; }
hdu 5206 Four Inages Strategy (空间向量)
标签:
原文地址:http://www.cnblogs.com/bruce27/p/4780368.html