uva 1352 LA3401 - Colored Cubes(模拟,4级)
2013-05-15 16:42
295 查看
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.
it consists of n lines. You can assume that 1
n
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.
[align=CENTER]Figure 2: Identically colored cubes[/align]
[align=CENTER]Figure 3: cubes that are not identically colored[/align]
[align=CENTER]Figure 4: An example of recoloring[/align]
[align=CENTER]Figure 5: Numbering of faces Figure 6: Coloring[/align]
思路:模拟暴力。一种是枚举目标状态,四个立方体最多24种颜色,24^6,枚举量太大。不可行
第二种,枚举每种立方体的状态,然后每个面都涂成原色最多的那个。24^4可以接受。
注意读入的立方体状态,front,right,top,button,left,back,
需要改成你程序认为的状态。我默认,front,left,top,right,button,back
然后只要确定六个不同的front,,左旋四次就得到立方体所有的状态了,之后枚举就好了。
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 followingit consists of n lines. You can assume that 1
n
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.
[align=CENTER]Figure 2: Identically colored cubes[/align]
[align=CENTER]Figure 3: cubes that are not identically colored[/align]
[align=CENTER]Figure 4: An example of recoloring[/align]
[align=CENTER]Figure 5: Numbering of faces Figure 6: Coloring[/align]
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
思路:模拟暴力。一种是枚举目标状态,四个立方体最多24种颜色,24^6,枚举量太大。不可行
第二种,枚举每种立方体的状态,然后每个面都涂成原色最多的那个。24^4可以接受。
注意读入的立方体状态,front,right,top,button,left,back,
需要改成你程序认为的状态。我默认,front,left,top,right,button,back
然后只要确定六个不同的front,,左旋四次就得到立方体所有的状态了,之后枚举就好了。
#include<iostream> #include<cstring> #include<cstdio> #include<map> #define FOR(i,n) for(int i=0;i<n;++i) using namespace std; const int mm=28; const int ck[]={0,3,2,4,1,5};///front,right,top,botton,left,back ///front,left,top,right,botton,back int to[][6]={{0,2,3,4,1,5},{4,1,0,3,5,2}};///left,back int dir[mm][6],n,dic[mm][6],d[mm],ans; map<string,int>mp; void turn(int*f,int*t) { int z[6]; FOR(i,6)z[i]=f[i]; FOR(i,6)f[i]=z[t[i]]; } void getdir() { int p[6]; FOR(i,6)p[i]=i;int z=0; FOR(i,6) { memcpy(dir[z],p,sizeof(p)); switch(i)///定front为哪个 { case 0:break; case 1:turn(dir[z],to[0]);turn(dir[z],to[1]);break;///front为1 case 2:turn(dir[z],to[1]);turn(dir[z],to[1]);turn(dir[z],to[1]);break;/// case 3:turn(dir[z],to[0]);turn(dir[z],to[1]);turn(dir[z],to[1]);turn(dir[z],to[1]);break;///left case 4:turn(dir[z],to[1]);break; case 5:turn(dir[z],to[1]);turn(dir[z],to[1]);break; } z++; FOR(j,3)///左旋,定第二面 { memcpy(dir[z],dir[z-1],sizeof(dir)); //FOR(k,6) //cout<<dir[z][k]<<" "; turn(dir[z],to[0]); ++z; } } /*FOR(i,24) { puts(""); FOR(j,6) cout<<dir[i][j]<<" "; }*/ } int col[mm][6]; void check() { FOR(i,n)FOR(j,6)///n个立体的颜色分布 col[i][dir[d[i]][j]]=dic[i][j]; int tot=0; int cnt[100]; FOR(i,6) { memset(cnt,0,sizeof(cnt)); int _max=0; FOR(j,n)///找同一面的同颜色最多的,当成目标色 _max=std::max(_max,++cnt[col[j][i]]); tot+=n-_max; } ans=std::min(ans,tot); } void dfs(int x) { if(x==n)check(); else { FOR(i,24)///枚举旋转情况 {d[x]=i;dfs(x+1);} } } int main() { getdir();string ss; while(scanf("%d",&n)&&n) { mp.clear();int zzz=0; FOR(i,n)FOR(j,6) { cin>>ss; if(mp[ss])dic[i][ck[j]]=mp[ss]; else mp[ss]=dic[i][ck[j]]=++zzz; } d[0]=0;///第一个不旋 ans=n*6; dfs(1); printf("%d\n",ans); } }
相关文章推荐
- uva 1352 LA3401 - Colored Cubes(模拟,4级)
- 【uva】1352-Colored Cubes
- uva 1352 - Colored Cubes(枚举)
- uva 1352 Colored Cubes(枚举)
- uva1352 - Colored Cubes 打表+暴力
- uva1352 Colored Cubes
- UVA 1352 Colored Cubes(回溯)
- Tokyo 2005 / UVa 1352 Colored Cubes (部分枚举&贪心)
- uva 1352 - Colored Cubes
- 【UVA1352】Colored Cubes
- UVA 1352 Colored Cubes(暴力搜索枚举)
- uva 1352 - Colored Cubes(枚举)
- Uva 1352 Colored Cubes 解题报告(枚举+码力)
- uva12100 Printer Queue (队列模拟, 据说是优先队列,错了)
- UVA - 1610 - Party Games(模拟or枚举)
- uva 1398 - Meteor 模拟 99
- 例题6-5 移动盒子 UVa 12657 链表(模拟链表)
- UVA 1344 Tian Ji -- The Horse Racing(模拟)
- UVA Andy's First Dictionary(模拟+字符串排序)
- UVA 101 - The Blocks Problem(模拟)