ACM-奇特的立方体
2024-08-28 12:42:03
题目描述:奇特的立方体
任意给出8个整数,将这8个整数分别放在一个立方体的八个顶点上,要求检验每个面上的四个数之和相等这个条件能否被满足。
输入
一次输入8个整数
输出
YES或者NO
YES表示可能构成满足条件的立方体
NO则表示不能
样例输入
1 2 3 4 5 6 7 8
样例输出
YES 思路:标记8个顶点的位置,构建子空间树即可。重点是计算每个面的顶点和!!!!!
// 奇特的立方体.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h" #include <iostream>
#include <cstring>
using namespace std; const int MAX = ;
int n = , flag, arr[MAX]/*8个数字*/, vis[MAX]/*8个位置是否放了*/,map[MAX]/*每个位置上方的数字*/; void printa()
{
for (int i = ; i < n; i++) cout << map[i] << " ";
cout << endl;
} int check()
{
//printa();
int s[] = { };
s[] = map[] + map[] + map[] + map[];
s[] = map[] + map[] + map[] + map[];
s[] = map[] + map[] + map[] + map[];
s[] = map[] + map[] + map[] + map[];
s[] = map[] + map[] + map[] + map[];
s[] = map[] + map[] + map[] + map[]; for (int i = ; i < ; i++)
{
if (s[i - ] != s[i]) return ;
} //cout << "sum:" << s[0] << endl;
return ;
} void DFS(int pos)
{
//cout << "pos:" << pos << endl;
if (flag) return;
if (pos >= n)
{
if (check()) { flag = ;}
return;
} for (int i = ; i < n; i++)
{
if (!vis[i])
{
vis[i] = ;
map[i] = arr[pos];
DFS(pos+); vis[i] = ;
map[i] = ;
}
} } int main()
{
for (int i = ; i < n; i++) cin >> arr[i]; flag = ;
memset(vis, , sizeof(vis));
memset(map, , sizeof(map)); DFS(); if (flag) cout << "YES" << endl;
else cout << "NO" << endl; return ;
}
最新文章
- 项目 CTR预估
- MIT 6.828 JOS学习笔记16. Lab 2.2
- LOMA280保险原理读书笔记
- jQuery学习笔记---兄弟元素、子元素和父元素的获取
- 2016.9.14 JavaScript入门之七面向对象和函数
- dao层实现类的常见写法
- layer.js:2 Uncaught TypeError: Cannot read property &#39;extend&#39; of undefined
- Linux中一些目录名称的含义
- 深入GDI图像显示
- z-index要同级比较,absolute包含块外有overflow-hidden
- Struct初学的,页面跳转
- C#的匿名委托 和 Java的匿名局部内部类
- Github SSH 的key 生成步骤下
- 中缀表达式得到后缀表达式(c++、python实现)
- css布局 - 工作中常见的两栏布局案例及分析
- Linux系统启动排错实验集合
- idea调试springmvc出现java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- python 喜马拉雅 音乐下载 演示代码
- 配置使用sourcemap调试vue源码爬坑
- JavaScript中的数据属性和访问器属性