BOJ 431. 立方体
2014-07-25 19:39
190 查看
题意:给出三维坐标中正方体的7个点,求出另外一个点。
思路:给出七个点,我们可以暴力的求出任何两个点之间的距离,最长的距离就是正方体的体对角线,而其中点就是正方体的重心。
通过比对体对角线的长度,我们可以找到唯一一个无法配对的点,那该点的沿重心的连线会到待求的点。可以得到答案。
代码如下:
思路:给出七个点,我们可以暴力的求出任何两个点之间的距离,最长的距离就是正方体的体对角线,而其中点就是正方体的重心。
通过比对体对角线的长度,我们可以找到唯一一个无法配对的点,那该点的沿重心的连线会到待求的点。可以得到答案。
代码如下:
#include <cstdio> #include <algorithm> #include <cmath> #include <set> #include <cstring> using namespace std; struct point{ int x,y,z; point(int a = 0,int b = 0,int c = 0):x(a),y(b),z(c){} double dist(const point & a){ return ((x - a.x) * (x -a.x) + (y - a.y) * (y -a.y) + (z -a.z) * (z - a.z)); } }; point cube[8]; long long d[8][8]; int main(void) { int T; scanf("%d", &T); while(T--){ bool used[7] = {false}; long long mx,my,mz; long long len = 0; memset(d,0,sizeof(d)); for(int i = 0 ; i < 7; ++i) scanf("%d %d %d", &cube[i].x,&cube[i].y,&cube[i].z); for(int i = 0 ; i < 7; ++i) for(int j = 0; j <= i; ++j){ d[i][j] = d[j][i] = cube[i].dist(cube[j]); if(d[i][j] > len){ len = d[i][j]; mx = cube[i].x + cube[j].x; my = cube[i].y + cube[j].y; mz = cube[i].z + cube[j].z; } } for(int i = 0; i < 7; ++i) for(int j = 0; j <=i; ++j) if(len == d[i][j]) used[i] = used[j] = true; point tmp; for(int i = 0 ; i< 7; ++i) if(!used[i]){ tmp = cube[i]; break; } long long x = mx - tmp.x; long long y = my - tmp.y; long long z = mz - tmp.z; printf("%lld %lld %lld\n",x,y,z); } return 0; }
相关文章推荐
- 立方体图片的在线绘制与制作
- 压缩信息立方体和集合技术内幕
- O3D 例2- 立方体的移动、缩放和旋转
- Photoshop 立方体方块组成的立体效果的绚丽背景
- 立方体明暗处理(即立方体隐面算法加上颜色)
- HTML立方体插件——JSCube v1.7
- boj 1336 简单的问题 不过自己没想到 别人解释的~~学习~~
- BOJ 1203 nimm游戏问题 参考别人思路 并且不是非常明白还
- [实验]用VTK给立方体贴纹理
- BOJ 1473 失落 按位异或
- BOJ262 Channel Coding DP
- o.boj 1081 Bovine Latin
- o.boj 1440 取石子
- o.boj 1512 数字统计
- sandy引擎学习笔记: 创建一个立方体
- Directx11教程(7) 画一个颜色立方体
- Android OpenGL ES 2.0 (二) 画立方体
- CATransform3D 矩阵变换之立方体旋转实现细节
- [OpenGL]课后案例10:立方体旋转程序
- BOJ 314 Good boy, laiyifa! [最短路spfa]