HDU 5029(三维正方形)
来源:互联网 发布:java代码漏洞扫描工具 编辑:程序博客网 时间:2024/05/20 19:30
只需判断四个边相等,并且个向量垂直即可,向量垂直用三维叉积 x1*x2+y1*y2+z1*z2 = 0;
<pre name="code" class="html">#include <cstdio>#include <stack>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>#include <cstdlib>using namespace std;typedef long long LL;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1double x[5],y[5],z[5];int ans[5],vis[5];double dist(int i,int j){ return (x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])+(z[i]-z[j])*(z[i]-z[j]);}int flag = 0;void dfs(int p){ if(p==4){ double num; int ok = 1; for(int j=0;j<4;j++){ int f1 = ans[j],f2=ans[(j+1)%4]; if(j==0) num = dist(f1,f2); else if(num!=dist(f1,f2)){ ok=0; } } for(int j=0;j<4;j++){ int f1=ans[j],f2=ans[(j+1)%4],f3=ans[(j+2)%4]; int a=x[f1]-x[f2],b=y[f1]-y[f2],c=z[f1]-z[f2]; int a1=x[f2]-x[f3],b2=y[f2]-y[f3],c2=z[f2]-z[f3]; if(a*a1+b*b2+c*c2!=0){ ok=0; break; } } if(ok) {flag = 1;} return ; } for(int i=0;i<4;i++){ if(!vis[i]){ vis[i]=1; ans[p]=i; dfs(p+1); vis[i]=0; } }}int main(){ int T,kase=1; scanf("%d",&T); while(T--){ x[4] = 0; y[4]=0; z[4]=0; for(int i=0;i<4;i++){ scanf("%lf %lf %lf",&x[i],&y[i],&z[i]); } memset(vis,0,sizeof(vis)); flag = 0; dfs(0); printf("Case #%d: %s\n",kase++,flag ? "Yes":"No"); } return 0;}
0 0
- HDU 5029(三维正方形)
- hdu-5206(判断空间正方形)
- HDU 5365 Run (判断正方形个数)
- hdu 5365 Run(判断正方形个数)
- HDU 2589 正方形划分(DFS+回溯)
- HDU 6055 Regular polygon (找正方形)
- hdu 5234 (三维背包)
- hdu 4273 Rescue(三维凸包 三维中心)
- HDU 2589正方形划分
- HDU 2589正方形划分
- hdu 3584 (三维树状数组模板 )
- HDU 3584 Cube(三维树状数组)
- 【树状数组(三维)】hdu 3584 Cube
- hdu 1240 Asteroids!(三维搜索)
- HDU 3584 Cube (三维树状数组)
- HDU 3584 Cube (三维树状数组)
- HDU 2225 Asteroids!(三维BFS)
- HDU 3584 Cube(三维树状数组)
- JAVA_SE基础——9.基本数据类型间的转换
- HashMap中 hashcode()方法和equels()方法重写问题
- boost库编译参数小结
- 期望、方差、协方差和矩
- 【C#】 24. HybridLocalSearchSolver + 自定义函数调用 + AddConstraint (constraint===1)
- HDU 5029(三维正方形)
- DirectX9 投影
- poj1004
- LeetCode (12) Path Sum (二叉树路径和判断)
- 剑指offer面试28
- 遥感图像快速传输算法
- 算法题8
- VC颜色区分故障
- 07-图5. 旅游规划(25)