LA 3401 - Colored Cubes
解题报告:有n(1<=n<=4)个立方体,每个立方体的每一个面涂有一种颜色,现在要将这些立方体的某些面的颜色重新涂一下,使得这n个立方体旋转到某一种状态下,对应的面的颜色都相同。
这题可以用暴力。现在首先要研究的是一个立方体可以有多少种旋转的方式,假设经过一次旋转之后,立方体变成一种新的状态,我们把这种状态叫做姿态,题目中将每个面编了号,我们可以这样来说明一种姿态,就是说假设上面的那个面的编号为x,并且前面的那个编号为y,这样就可以唯一地确定这种姿态了,假设把题开始的那种状态向左转一次,那么
就得到上面的编号为3,前面的编号为6,这样就确定了一种姿态,这种姿态可以被描述为{5,1,3,4,6,2},按照这样的方法,很明显可以枚举出24种不同的姿态,当然,你也可以通过程序来确定这24种状态是怎么样的。列举出来的24种状态如下:
{2,1,5,0,4,3},{2,0,1,4,5,3},{2,4,0,5,1,3},{2,5,4,1,0,3},{4,2,5,0,3,1},
{5,2,1,4,3,0},{1,2,0,5,3,4},{0,2,4,1,3,5},{0,1,2,3,4,5},{4,0,2,3,5,1},
{5,4,2,3,1,0},{1,5,2,3,0,4},{5,1,3,2,4,0},{1,0,3,2,5,4},{0,4,3,2,1,5},
{4,5,3,2,0,1},{3,4,5,0,1,2},{3,5,1,4,0,2},{3,1,0,5,4,2},{3,0,4,1,5,2},
{1,3,5,0,2,4},{0,3,1,4,2,5},{4,3,0,5,2,1},{5,3,4,1,2,0}};
下一步我们就该讨论枚举这n个立方体每个立方体有24种姿态,然后分别求出每种不同的姿态需要重新涂颜色的最少的数量。可以用一个dfs来枚举出每个立方体的姿态,这样最多要枚举的次数就是24^4。然后就是如何计算每一种情况下最少应该重新涂改的颜色的个数,我们可以先分成6个面,然后计算这个可以另外写一个函数来判断,我的做法是将每个立方体的对应的面的颜色先存到一个字符串数组里面去,然后求出这些颜色里面哪一种是最多的,然后再看如果跟这个最多的颜色是不同的话就让计数器加1,最后得到的就是这个面应该修改的总的数量,然后按照同样的方式把每个面的加起来就可以了。
#include<iostream>
#include<cstdio>
#include<cstring> using namespace std;
char map[][][];
int kase[][]={
{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},
{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},
{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},
{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},
{,,,,,},{,,,,,},{,,,,,},{,,,,,}};
const int MAX = 0xffffff;
int Min = MAX,n,dire[];
int panduan(char p[][]) {
int a[]={};
for(int i=;i<n;++i)
for(int j=;j<n;++j)
if(!strcmp(p[i],p[j]))
a[i]++;
int Max=;
for(int i=;i<n;++i)
if(a[i]>a[Max])
Max=i;
int tot=;
for(int i=;i<n;++i)
if(strcmp(p[i],p[Max]))
tot++;
return tot;
}
void Cube() {
int sum=;
for(int m=;m<;++m) {
char bijiao[][]; //改成动态分配内存,否则容易出错
for(int p=;p<n;++p)
strcpy(bijiao[p],map[p][kase[dire[p]][m]]);
sum += panduan(bijiao);
}
if(sum<Min)
Min = sum;
}
void dfs(int deep) {
if(deep == n-)
Cube();
else
for(int i=;i<;++i) {
dire[deep] = i;
dfs(deep+);
}
}
int main() {
while(scanf("%d",&n)&&n) {
for(int i=;i<n;++i)
for(int j=;j<;++j)
scanf("%s",map[i][j]);
Min = MAX;
dfs();
printf("%d\n",Min);
}
return ;
}
LA 3401 - Colored Cubes的更多相关文章
- UVALive 3401 - Colored Cubes 旋转 难度: 1
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- UVALive - 3401 Colored Cubes
好久没写解题回顾了.主要是没什么时间,但是还是一直在刷题,图论刷了70%的知识点,不过感觉长进不是很大,所以觉得还是得一步步来,最近还是先从刘汝佳大白书把前面基础章节刷完然后再决定以后的训练方式吧. ...
- UVaLive 3401 Colored Cubes (暴力)
题意:给定n个立方体,让你重新涂尽量少的面,使得所有立方体都相同. 析:暴力求出每一种姿态,然后枚举每一种立方体的姿态,求出最少值. 代码如下: #pragma comment(linker, &qu ...
- 1352 - Colored Cubes (枚举方法)
There are several colored cubes. All of them are of the same size but they may be colored differentl ...
- UVA 10733 - The Colored Cubes(Ploya)
UVA 10733 - The Colored Cubes 题目链接 题意:一个立方体.n种颜色,问能涂成多少不同立方体 思路:Ploya求解,正方体相应24种不同旋转一一计算出循环个数就可以.和 U ...
- POJ2741 Colored Cubes
Description There are several colored cubes. All of them are of the same size but they may be colore ...
- 【poj2741】 Colored Cubes
http://poj.org/problem?id=2741 (题目链接) 题意 给出n个骰子,每一面都有一种颜色,问最少更改多少个面的颜色可以使所有骰子通过旋转后完全相同. solution 迷之d ...
- 【codeforces 1025E】Colored Cubes 【构造】
题意 有一个n*n的棋盘和m个棋子,每个棋子有一个初始位置和一个目标位置,每次移动只能选择一个棋子移动到他相邻的格子,并且花费一秒钟.请你找出一个移动的方法,使得在10800步内将所有棋子移动到目标位 ...
- LA 3401
彩色立方体. [分析] 弄清楚24种状态,可以由标准姿态旋转而来. 计算24种状态: #include <iostream> #include <string> ,,,,, } ...
随机推荐
- jsp中常用操作字符串的el表达式
由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用. 准备工作:1)导入jar包:standard.jar和jstl.jar2) ...
- php 正则表达式捕获组与非捕获组
熟练掌握正则表达式是每个程序员的基础要求,对于每个初学者来说会被正则表达式一连串字符弄得头晕眼花.博主便会如此,一直对正则表达式有种莫名的恐惧.近来看到另一位博友写的 <php正则表达式> ...
- OpenStack Newton:集虚拟化,裸金属和容器部署的统一云平台(转载)
2016-10-08木屐大数据在线 国庆长假第六天,OpenStack第十四版本Newton(牛顿?)发布,官方介绍中强调这是一个集虚拟化.裸金属和容器技术的一体化平台,可通过一套API来管理裸金属. ...
- Grovvy Step byStep Examples
def LIMIT=10 def count=1 println 'start' while(count<=LIMIT){ println "count:${count}" ...
- easyui中tree控件添加自定义图标icon
来源于:http://blog.163.com/lintianhuanhai@126/blog/static/165587366201421704420256/ <!DOCTYPE html&g ...
- python 2.7的安装
最近准备入手学习python 这里我是按照:http://blog.csdn.net/jcjc918/article/details/11022345 来的 我在安装python 3 的时候发现上下左 ...
- iOS开发中的错误整理,启动图片设置了没有效果;单独创建xib需要注意的事项;图片取消系统渲染的快捷方式
一.启动图片设置了没有效果 解决方案:缓存啊!卸了程序重新安装吧!!!!! 二.单独创建xib需要注意的事项 三.图片取消系统渲染的快捷方式
- .net架构设计读书笔记--第一章 基础
第一章 基础 第一节 软件架构与软件架构师 简单的说软件架构即是为客户构建一个软件系统.架构师随便软件架构应运而生,架构师是一个角色. 2000年9月ANSI和IEEE发布了<密集性软件架构建 ...
- Js-字符转换数字
s 字符串转化成数字 的 三种方法主要有 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数, ...
- Java基础-字面值
在Java源代码中,字面值用于表示固定的值(fixed value).数值型的字面值是最常见的,字符串字面值可以算是一种,当然也可以把特殊的null当做字面值.字面值大体上可以分为整型字面值.浮点字面 ...