我是靠谱客的博主 俏皮大侠,最近开发中收集的这篇文章主要介绍UVALive - 3401 Colored Cubes,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Colored Cubes
Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu

Submit Status

Description

download as pdf

There are several colored cubes. All of them are of the same size but they may be colored differently. Each face of these cubes has a single color. Colors of distinct faces of a cube may or may not be the same.

Two cubes are said to be identically colored if some suitable rotations of one of the cubes give identical looks to both of the cubes. For example, two cubes shown in Figure 2 are identically colored. A set of cubes is said to be identically colored if every pair of them are identically colored.

A cube and its mirror image are not necessarily identically colored. For example, two cubes shown in Figure 3 are not identically colored.

You can make a given set of cubes identically colored by repainting some of the faces, whatever colors the faces may have. In Figure 4, repainting four faces makes the three cubes identically colored and repainting fewer faces will never do.

Your task is to write a program to calculate the minimum number of faces that needs to be repainted for a given set of cubes to become identically colored.

Input

The input is a sequence of datasets. A dataset consists of a header and a body appearing in this order. A header is a line containing one positive integer n and the body following it consists ofn lines. You can assume that 1$ le$n$ le$4 . Each line in a body contains six color names separated by a space. A color name consists of a word or words connected with a hyphen (-). A word consists of one or more lowercase letters. You can assume that a color name is at most 24-characters long including hyphens.

A dataset corresponds to a set of colored cubes. The integer n corresponds to the number of cubes. Each line of the body corresponds to a cube and describes the colors of its faces. Color names in a line is ordered in accordance with the numbering of faces shown in Figure 5. A line


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

Source

Regionals 2005 >>  Asia - Tokyo




刘汝佳大白书里的例题,2005年东京区域赛,有一定难度,但不是不可做。代码如下:
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
const int maxn=4;
int n,dice[maxn][6],ans;
int left0[]={4,0,2,3,5,1};
int up[]={2,1,5,0,4,3};
int p0[]={0,1,2,3,4,5};
int dice24[24][6]={0};
void rot(int *t,int *p)
{
int i,q[6];
//memcpy(q,p,sizeof(q));
for(i=0;i<6;i++)
p[i]=t[p[i]];
}
void enumerate_permutations()
{
// printf("int dice24[24][6]={n");
int cnt0=-1;
for(int i=0;i<6;i++)
{
int p[6];
memcpy(p,p0,sizeof(p0));
if(i==0)rot(up,p);
if(i==1)
{
rot(left0,p);rot(up,p);
}
if(i==3)
{
rot(up,p);rot(up,p);
}
if(i==4)
{
rot(left0,p);rot(left0,p);rot(left0,p);rot(up,p);
}
if(i==5)
{
rot(left0,p);rot(left0,p);rot(up,p);
}
for(int j=0;j<4;j++)
{
//printf("{%d,%d,%d,%d,%d,%d},n",p[0],p[1],p[2],p[3],p[4],p[5]);
cnt0++;
for(int k=0;k<6;k++)
dice24[cnt0][k]=p[k];
rot(left0,p);
}
}
//printf("};n");
/* for(int n=0;n<24;n++)//打表

{

printf("{");

for(int m=0;m<6;m++)

printf("%d ",dice24[n][m]);

printf("},n");

}*/
}
vector<string> names;
int ID(const char *name)
{
string s(name);
int n=names.size();
for(int i=0;i<n;i++)
if(names[i]==s)
return i;
names.push_back(s);
return n;
}
int r[maxn],color[maxn][6];
void check()
{
for(int i=0;i<n;i++)
for(int j=0;j<6;j++)
color[i][dice24[r[i]][j]]=dice[i][j];
int tot=0;
for(int j=0;j<6;j++)
{
int cnt[maxn*6];
memset(cnt,0,sizeof(cnt));
int maxface=0;
for(int i=0;i<n;i++)
maxface=max(maxface,++cnt[color[i][j]]);
tot+=n-maxface;
}
ans=min(ans,tot);
}
void dfs(int d)
{
if(d==n) check();
else
for(int i=0;i<24;i++)
{
r[d]=i;
dfs(d+1);
}
}
int main()
{
enumerate_permutations();//打表
while(scanf("%d",&n)==1&&n)
{
names.clear();
for(int i=0;i<n;i++)
for(int j=0;j<6;j++)
{
char name[30];
scanf("%s",name);
dice[i][j]=ID(name);
}
ans=n*6;//
r[0]=0;
dfs(1);
printf("%dn",ans);
}
return 0;
}

最后

以上就是俏皮大侠为你收集整理的UVALive - 3401 Colored Cubes的全部内容,希望文章能够帮你解决UVALive - 3401 Colored Cubes所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部