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> ,,,,, } ...
随机推荐
- 『开源』Slithice 2013 服务器集群 设计和源码
相关介绍文章: <『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布> <『集群』001 Slithice 服务器集群 概述> <『集群』002 Sli ...
- 手把手教你Linux服务器集群部署.net网站 - Linux系统安装和设置
在开源软件已成趋势化的今天,微软这‘老古董’也开始向开源方向发力,这对我们.NET开发者是极大的喜讯.而在开源软件中, Linux就是其中一个优秀的代表,几乎各行业和计算机有关的都有它的身影,其中一点 ...
- javascript基础知识拾遗
1 下面列出的值被当作假 false null undefined '' 0 NaN 其它所有值被当作是真 console.log(undefined || true); //true console ...
- 由DataGridTextColumn不能获取到父级DataContext引发的思考
在项目中使用DataGrid需要根据业务动态隐藏某些列,思路都是给DataGrid中列的Visibility属性绑定值来实现(项目使用MVVM),如下 <DataGridTextColumn H ...
- Symfony学习--原创。。。。
{{ constant('Symfony\\Component\\HttpKernel\\Kernel::VERSION') }} //显示当前symfony的版本 #div { opacity: 0 ...
- emmet 缩写API
http://docs.emmet.io/cheat-sheet/
- (转)在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持
原文:http://www.cnblogs.com/lyongde/p/3745030.html 此文在原文的基础上改进了几个步骤,因为经本人实践,原文无法正确配置. WAMPServer可以让开发者 ...
- CentOS7 安装 Mono
官网参考:http://www.mono-project.com/docs/getting-started/install/linux/#centos-7-fedora-19-and-later-an ...
- ORACLE在存储过程中记录日志的处理包
Java开发过程中一般使用LOG4J来将程序的运行日志记录到文件中,在ORACLE存储过程中也需要记录日志,我将工作中自己整理的一个记录日志的包分享出来,其实很简单,希望大家多提意见. 一.表结构 为 ...
- 2014ACMICPC西安网赛1006
题意:给你一个骰子的初始状态和可以进行的四种操作,求从初始状态到目标状态的最少操作次数 题目本身很简单,bfs即可.但是因为骰子有六个面,搜索判重和记录状态比较麻烦.这时候就需要神器STL了. #in ...