LA 3401 - Colored Cubes

原创 2015年07月09日 15:06:10

color1 color2 color3 color4 color5 color6


corresponds to a cube colored as shown in Figure 6.

The end of the input is indicated by a line containing a single zero. It is not a dataset nor a part of a dataset.

\epsfbox{p3401a.eps}

Figure 2: Identically colored cubes

\epsfbox{p3401b.eps}

Figure 3: cubes that are not identically colored

\epsfbox{p3401c.eps}

Figure 4: An example of recoloring

\epsfbox{p3401d.eps}

Figure 5: Numbering of faces Figure 6: Coloring

Output 

For each dataset, output a line containing the minimum number of faces that need to be repainted to make the set of cub es identically colored.

Sample Input 

3 
scarlet green blue yellow magenta cyan 
blue pink green magenta cyan lemon 
purple red blue yellow cyan green 
2 
red green blue yellow magenta cyan 
cyan green blue yellow magenta red 
2 
red green gray gray magenta cyan 
cyan green gray gray magenta red 
2 
red green blue yellow magenta cyan 
magenta red blue yellow cyan green 
3 
red green blue yellow magenta cyan 
cyan green blue yellow magenta red 
magenta red blue yellow cyan green 
3 
blue green green green green blue 
green blue blue green green green 
green green green green green sea-green 
3 
red yellow red yellow red yellow 
red red yellow yellow red yellow 
red red red red red red 
4 
violet violet salmon salmon salmon salmon 
violet salmon salmon salmon salmon violet 
violet violet salmon salmon violet violet 
violet violet violet violet salmon salmon 
1 
red green blue yellow magenta cyan 
4 
magenta pink red scarlet vermilion wine-red 
aquamarine blue cyan indigo sky-blue turquoise-blue 
blond cream chrome-yellow lemon olive yellow 
chrome-green emerald-green green olive vilidian sky-blue 
0

Sample Output 

4

2

0

0

2

3

4

4

0

16

#include <iostream>
#include <stdio.h>
#include <map>
#include <queue>
#include <cstring>
#include <string.h>
using namespace std;
#define FOR(i,n) for(int i=1; i<=n; i++)
int all[24][6] = {{1,2,3,4,5,6},{2,3,4,1,5,6},{3,4,1,2,5,6},{4,1,2,3,5,6},{5,1,6
,3,2,4},{1,6,3,5,2,4},{6,3,5,1,2,4},{3,5,1,6,2,4},{2,5,4,6,1,3},{5,4,6,2,1,3},{4
,6,2,5,1,3},{6,2,5,4,1,3},{1,4,3,2,6,5},{4,3,2,1,6,5},{3,2,1,4,6,5},{2,1,4,3,6,5
},{6,1,5,3,4,2},{1,5,3,6,4,2},{5,3,6,1,4,2},{3,6,1,5,4,2},{4,5,2,6,3,1},{5,2,6,4
,3,1},{2,6,4,5,3,1},{6,4,5,2,3,1},};
map<string,int>mID;
int n, id, ans;
int MoFang[5][7];
int sum[30];
int get_temp()
{
    int rt = 0;
    FOR(j,6)
    {
        int s = 0;
        memset(sum,0,sizeof sum);
        FOR(i,n)
        {
            sum[MoFang[i][j]]++;
            s = max(s,sum[MoFang[i][j]]) ;
        }
        rt += n - s;
    }
    return rt;
}
void dfs(int xb)
{
    if(xb==n+1)
    {
        int temp = get_temp();
        
        if(temp<ans) 
        {
            ans = temp;
        }
        return;
    }
    for(int i=0; i<24; i++)
    {
        int bc[7];
        FOR(j,6) bc[j] = MoFang[xb][j];
        FOR(j,6) MoFang[xb][j] = bc[all[i][j-1]];
        dfs(xb+1);
        FOR(j,6) MoFang[xb][j] = bc[j];
    }
}
int shunxu[]={0,3,4,5,6,2,1};
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)break;
        char s0[10];
        int cl;
        id = 1;
        mID.clear();
        FOR(i,n) FOR(j,6) 
        {
            scanf("%s",s0);
            string s="";
            int len = strlen(s0);
            for(int k=0; k<len ; k++)
            {
                s += s0[k];
            }
            s[len] ='\0';
      
            if(mID[s])
            {
                cl = mID[s];
            }else{
                cl = id++;
                mID[s] = cl;
            }
            MoFang[i][shunxu[j]] = cl;
        }
        
        ans = 6*n;
        dfs(2);
        printf("%d\n",ans);
    }
    return 0;
}
/*map<string,bool>QuChong;
int top;
void dfs(char g[])
{
    string s="";
    char c;
    int i;
    for(i=1; i<=6; i++)
    {
        s += g[i];
    }
    s[6] ='\0';
    if(QuChong[s])
    {
        return;
    }else{
       
        QuChong[s] = true;
        printf("{");
        for(i=1; i<6; i++)
        printf("%c,",g[i]);
        printf("%c},",g[6]);
        top++;
    }
    char next[10];
    memcpy(next, g, 8); 
    c = next[1];
     
    for(i=1; i<4; i++)next[i] = next[i+1];
     
    next[4] = c;
    dfs(next);
    
    memcpy(next, g, 8);
    c = next[1];
    next[1] = next[5]; next[5] = next[3]; next[3] = next[6]; next[6] = c;
    dfs(next);
}
void get_all()
{
    QuChong.clear();
    top =0;
    printf("int all[24][6] = {");
    char g[10]={'0','1','2','3','4','5','6','\0'};
    dfs(g);
    printf("}\n");
    cout<<endl<<(sizeof(g))<<endl;
    cout<<endl<<top<<endl;
}*/


 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

uvaLive 3401 Colored Cubes 暴力

题意:给出n个立方体,(n 解法:暴力枚举,难在编写程序。 一个立方体有24个姿势,因为上面有6中可能,难后前面又有4中可能,故有24种可能。 现在让第一个立方体任选一种姿势,然后枚举其他立方体...
  • yskyskyer123
  • yskyskyer123
  • 2016年07月11日 16:48
  • 152

uva 1352 LA3401 - Colored Cubes(模拟,4级)

There are several colored cubes. All of them are of the same size but they may be colored differentl...
  • nealgavin
  • nealgavin
  • 2013年05月15日 16:42
  • 1086

LA 3401 Colored Cubes

题目http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=30485题解 本来这道题一开始分析的时候有两种想法,第一是枚举每个立方...
  • QWsin
  • QWsin
  • 2016年07月05日 11:42
  • 224

UVALive - 3401 Colored Cubes

好久没写解题回顾了。主要是没什么时间,但是还是一直在刷题,图论刷了70%的知识点,不过感觉长进不是很大,所以觉得还是得一步步来,最近还是先从刘汝佳大白书把前面基础章节刷完然后再决定以后的训练方式吧。 ...
  • rootial
  • rootial
  • 2014年08月26日 17:43
  • 330

【学习】python开源框架

1.Django: Python Web应用开发框架,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。 2. Diesel:基...
  • shandianke
  • shandianke
  • 2014年09月14日 22:10
  • 6022

三维重建移动立方体法(Marching Cubes Algorithm)的查找表的构造

Marching cubes算法是实现三维重建经典算法,该算法的难点之一就是查找表的构造,本文为该算法的查找表经常出现的漏点的情况进行简短的分析,以及提供了详尽的实现代码。...
  • fourierFeng
  • fourierFeng
  • 2014年01月13日 14:33
  • 4192

linux下的so、o、lo、a、la文件的区别

o: 编译的目标文件 a: 静态库,其实就是把若干o文件打了个包 so: 动态链接库(共享库) lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息 la: 使用l...
  • vbLittleBoy
  • vbLittleBoy
  • 2014年05月04日 17:39
  • 1224

UVALive - 3401 Colored Cubes

Colored Cubes Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu...
  • acm_1361677193
  • acm_1361677193
  • 2014年11月04日 22:57
  • 359

UVa-3401 Colored Cubes

题目概述: 有n个带颜色的立方体,每个面都涂有一种颜色。要求重新涂尽量少的面,使得所有立方体完全相同。两个立方体相同的含义是:存在一种旋转方式,是的两个立方体对应面的颜色相同。 思路: 每一个立...
  • Mountain_lovers
  • Mountain_lovers
  • 2017年03月02日 16:23
  • 122

UVALive 3401 Colored Cubes

刘汝佳大神书上的题目,每一个方框有24中不同的姿态,第一个方块的姿态不变,然后去枚举后面...
  • xiaohaowudi
  • xiaohaowudi
  • 2014年06月09日 00:28
  • 340
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LA 3401 - Colored Cubes
举报原因:
原因补充:

(最多只允许输入30个字)