码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 5206 Four Inages Strategy (空间向量)

时间:2015-09-03 17:50:24      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

中文题目:《四象阵法》

判断空间四点能否组成正方形。

一次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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!