Codeforces Round #265 (Div. 2) D. Restore Cube 立方体判断_html/css_WEB-ITnose

php中文网
发布: 2016-06-24 11:55:38
原创
1140人浏览过

http://codeforces.com/contest/465/problem/d

给定8个点坐标,对于每个点来说,可以随意交换x,y,z坐标的数值。问说8个点是否可以组成立方体。


暴力枚举即可,注意检查立方体姿势不对会T

如果8个点形成一个立方体是这样的:找到所有点对之间的最小距离,应等于边的长度L。每个顶点应该正好有三个点距离它为L,而且构成的三个边应两两垂直。如果这些条件都满足在每一点上,那么一定只能是立方体。检查复杂度约O(8^2)。

文心智能体平台
文心智能体平台

百度推出的基于文心大模型的Agent智能体平台,已上架2000+AI智能体

文心智能体平台 0
查看详情 文心智能体平台

立即学习前端免费学习笔记(深入)”;

#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <string>#include <queue>#include <vector>#include<set>#include <iostream>#include <algorithm>using namespace std;#define RD(x) scanf("%d",&x)#define RD2(x,y) scanf("%d%d",&x,&y)#define clr0(x) memset(x,0,sizeof(x))typedef long long LL;typedef pair<int, int> pii;const double eps = 1e-9;const double pi = acos(-1.0);LL dianji(LL x1,LL y1,LL z1,LL x2,LL y2,LL z2){    return x1*x2+y1*y2+z1*z2;}LL dist2(LL x1,LL y1,LL z1,LL x2,LL y2,LL z2){    return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2);}LL v[8][3],minl[8],l;int cntmin[8],to[8][8];int index[8];bool chuizhi(LL x1,LL y1,LL z1,LL x2,LL y2,LL z2){    return dianji(x1,y1,z1,x2,y2,z2) == 0;}bool chuizhi(int i,int a,int b){    return chuizhi(v[a][0] - v[i][0],v[a][1] - v[i][1],v[a][2] - v[i][2],v[b][0] - v[i][0],v[b][1] - v[i][1],v[b][2] - v[i][2]);}bool chuizhi(int i,int a,int b,int c){    return chuizhi(i,a,b)&&chuizhi(i,b,c)&&chuizhi(i,a,c);}bool check(){    clr0(index),clr0(minl),clr0(cntmin);    for(int i = 0;i < 8;++i){        for(int j = i + 1;j < 8;++j){            l = dist2(v[i][0],v[i][1],v[i][2],v[j][0],v[j][1],v[j][2]);            if(!minl[i] || minl[i] > l)                minl[i] = l,to[i][cntmin[i] = 0] = j;            else if(minl[i] == l)                to[i][++cntmin[i]] = j;            if(!minl[j] || minl[j] > l)                minl[j] = l,to[j][cntmin[j] = 0] = j;            else if(minl[j] == l)                to[j][++cntmin[j]] = i;        }        if(cntmin[i]!=2 || !minl)            return false;        if(!chuizhi(i,to[i][0],to[i][1],to[i][2]))            return false;    }    return true;}bool find(int x){    if(x == 8){        return check();    }    do{        if(find(x+1))            return true;    }while(next_permutation(v[x],v[x]+3));    return false;}int main() {    for(int i = 0;i < 8;++i){        scanf("%I64d%I64d%I64d",&v[i][0],&v[i][1],&v[i][2]);        sort(v[i],v[i]+3);    }    if(!find(0))        puts("NO");    else{        puts("YES");        for(int i = 0;i < 8;++i){            printf("%I64d %I64d %I64d\n",v[i][0],v[i][1],v[i][2]);        }    }    return 0;}
登录后复制


HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号