1 /*
 2     题意:给出立方体的每个顶点的坐标(是由源坐标三个数某几个数被交换之后得到的!),
 3     问是否可以还原出一个立方体的坐标,注意这一句话:
 4     The numbers in the i-th output line must be a permutation of the numbers in i-th input line!
 5
 6     思路:
 7           我们只要对输入的每一行数据进行枚举每一个排列, 然后检查时候能构成立方体就好了!
 8           检查立方体:找到最小的边长的长度 l, 统计边长为l, sqrt(2)*l, sqrt(3)*l的边长
 9           条数,如果恰好分别为12, 12, 4那么就是立方体了...
10 */
11 #include<iostream>
12 #include<cstdio>
13 #include<cstring>
14 #include<algorithm>
15
16 using namespace std;
17
18 typedef long long LL;
19
20 LL num[8][3], d[70];
21
22 LL dis(int i, int j){
23     return  (num[i][0]-num[j][0])*(num[i][0]-num[j][0]) +
24             (num[i][1]-num[j][1])*(num[i][1]-num[j][1]) +
25             (num[i][2]-num[j][2])*(num[i][2]-num[j][2]);
26 }
27
28
29 void out(){
30     for(int i=0; i<8; ++i){
31         printf("%lld", num[i][0]);
32          for(int j=1; j<3; ++j)
33              printf(" %lld", num[i][j]);
34          printf("\n");
35     }
36 }
37
38 int vis[8][8];
39
40 bool check(){
41     int cnt=0;
42     int cnt1=0, cnt2=0, cnt3=0;
43     LL L=(1LL)<<60;
44     memset(vis, 0, sizeof(vis));
45     for(int i=0; i<8; ++i)
46         for(int j=0; j<8; ++j)
47              if(i!=j && !vis[i][j] && !vis[j][i]){
48                  d[cnt++]=dis(i, j);
49                  vis[i][j]=vis[j][i]=1;
50                  if(L>d[cnt-1])
51                     L=d[cnt-1];
52             }
53     if(L==0) return false;
54     for(int i=0; i<cnt; ++i)
55         if(d[i] == L) cnt1++;
56         else if(d[i] == 2*L) cnt2++;
57         else if(d[i] == 3*L) cnt3++;
58     if(cnt1==12 && cnt2==12 && cnt3==4) return true;
59     return false;
60 }
61
62 bool dfs(int cur){
63     if(cur>=8) return false;
64     sort(num[cur], num[cur]+3);//排序
65     do{
66         if(check()){
67             printf("YES\n");
68             out();
69             return true;
70         }
71         if(dfs(cur+1)) return true;//得到当前的全排列之后,继续向下寻找
72     }while(next_permutation(num[cur], num[cur]+3));//枚举这一个行的每一个全排列
73     return false;
74 }
75
76 int main(){
77     for(int i=0; i<8; ++i)
78         for(int j=0; j<3; ++j)
79             scanf("%lld", &num[i][j]);
80     if(!dfs(0))
81        printf("NO\n");
82     return 0;
83 }

转载于:https://www.cnblogs.com/hujunzheng/p/3966599.html

codeforces Restore Cube(暴力枚举)相关推荐

  1. codeforces数学1600day6[CodeForces - 1029C多区间交+枚举,CodeForces 992C[数学公式推导],CodeForces 992B[质因数分解+暴力枚举]]

    A - Maximal Intersection CodeForces - 1029C 题目大意:就是给你n个区间,这n个区间有公共的区间长度为x,现在叫你从这n个区间中删掉一个使得x最大化. 解题思 ...

  2. CodeForces - 253C:Text Editor(暴力枚举)

    Discription Vasya is pressing the keys on the keyboard reluctantly, squeezing out his ideas on the c ...

  3. D. Shuffle(cf)暴力枚举 + 组合数学

    原题链接:Problem - 1622D - Codeforces 题目大意:给你一串01串,告诉你长度n和一个数k,这个串中所有1的数量为k的子串,可以把这段子串重新排序.问你最后这个串能有多少种. ...

  4. POJ 3174 暴力枚举

    思路: 暴力枚举三个点 判一判 搞定 (x1*y1=x2*y2) x1.y1.x2.y2为他们两两的差 //By SiriusRen #include <cstdio> using nam ...

  5. 最大字段和 冲出暴力枚举

    这篇解题报告是对我最近一些题的总结,里面的代码都是我解题,优化,再优化的过程的记录,记录了自己对算法的完善与优化思路,还有对编程哲学的理解:do it,do it well. 很感谢孙老师您,让自己可 ...

  6. hdu 4587 TWO NODES 暴力枚举+tarjan

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4587 题意是拿掉两个点 求最多可以把整个图分成几个联通块 注意到有一个模板是可以通过找割点来快速求出 ...

  7. 一道暴力枚举题Win32版本示例

    来看一个问题:该问题的解法是 暴力枚举:这大概是ACM方面的:名称叫火柴棒等式: 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式?等式中的A.B.C是用火柴棍拼出的整数( ...

  8. C. Divisibility by Eight【暴力枚举】

    暴力枚举即可.枚举1位这种情况,枚举2位这种情况,枚举3位这种情况. 3位满足足以,其他的4位,5位...都包含1000必定满足. #include<bits/stdc++.h> usin ...

  9. YBTOJ:灯光控制(贪心)(公倍数)(暴力枚举)

    文章目录 题目描述 解析 代码 题目描述 解析 没有想出来 首先可以确定开关要么开一次,要么不动,其他都和这俩是等价的 一开始最先想到的就是贪心的方法,每个开关遍历,如果按下会使答案变好就按下. 但是 ...

最新文章

  1. 使用jsp和tld实现javaweb开发
  2. PHP 模拟真实ip,PHP实现-获取用户的真实IP
  3. 10.16 多校联测
  4. 索引超出矩阵维度_搜索引擎技术之倒排索引原理详解,及案例分析
  5. php一句话怎么写_PHP一句话木马后门
  6. linux升级openssl需要先卸载吗,在Linux系统上升级OpenSSL的方法
  7. 数据结构与算法 —— 基础一(排列组合)
  8. 卡饭里的云计算机,微云可以在电脑用吗
  9. python邮件群发_Python操作Gmail@定时定向群发邮件
  10. 电赛专题 |国一作品_线路负载及故障检测装置
  11. ios如何解除dns被劫持_mac dns被劫持如何修复-Mac DNS被劫持解决方法 - 河东软件园...
  12. c语言小蜜蜂游戏编程,GMS2从零做游戏:小蜜蜂(一)
  13. Fitbit与JMDC签订协议,指定JMDC为日本企业客户的Fitbit Premium独家分销商
  14. vue中样式穿透的三种写法
  15. 微信小程序使用video组件时的一些坑
  16. 11.最长上升子序列(LIS)
  17. 查看mysql删除日志_如何查看数据库删除记录日志
  18. 电路基础 01电压、电流和功率
  19. C++ lower_bound() upper_bound() 函数用法详解(深入了解,一文学会)
  20. 探索性测试与脚本测试:谁赢了?

热门文章

  1. css x轴不滚动_css – 固定div,动态内容不滚动
  2. java.io.IOException 权限不够
  3. 检测到目标FTP服务可匿名访问
  4. 查看linux是否为虚拟机,以及其它信息,cpu,主机型号,主板型号等
  5. 企业实战07:Oracle数据库_查询语句
  6. 1450. 在既定时间做作业的学生人数
  7. Cause: java.lang.IllegalArgumentException: No enum constant org.apache.ibatis.type.JdbcType.Date
  8. Qt中Tcp通信的简单使用二
  9. java写出http数据包_java用jpcap怎么识别出http和https的数据包?
  10. java飞行记录器是什么_运行java飞行记录器JFR(java flight recorder)