1352 - Colored Cubes

来源:互联网 发布:淘宝1元贱卖腾讯会员 编辑:程序博客网 时间:2024/05/16 10:11

题目地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=456&problem=4098&mosmsg=Submission+received+with+ID+18760231

坚持!坚持!继续刷题

#include<iostream>#include<cstdio>#include<cmath>#include<cstdlib>#include<vector>using namespace std;const int maxn=4;/*int dice24[24][6]={{2,1,5,0,4,3},{5,1,3,2,4,0},{3,1,0,5,4,2},{0,1,2,3,4,5},{4,2,5,0,3,1},{4,5,3,2,0,1},{4,3,0,5,2,1},{4,0,2,3,5,1},{0,1,2,3,4,5},{2,1,5,0,4,3},{5,1,3,2,4,0},{3,1,0,5,4,2},{5,1,3,2,4,0},{3,1,0,5,4,2},{0,1,2,3,4,5},{2,1,5,0,4,3},{1,3,5,0,2,4},{1,0,3,2,5,4},{1,2,0,5,3,4},{1,5,2,3,0,4},{3,4,5,0,1,2},{0,4,3,2,1,5},{2,4,0,5,1,3},{5,4,2,3,1,0}};*/int dice24[24][6] = {{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},{1, 3, 5, 0, 2, 4},{0, 3, 1, 4, 2, 5},{4, 3, 0, 5, 2, 1},{5, 3, 4, 1, 2, 0},{3, 4, 5, 0, 1, 2},{3, 5, 1, 4, 0, 2},{3, 1, 0, 5, 4, 2},{3, 0, 4, 1, 5, 2},};int dice[maxn][6],color[maxn][6],ans,r[maxn];vector<string>names;int ID(const char* name){string s(name);int n1=names.size();for(int i=0;i<n1;i++)   if(s==names[i])return i;names.push_back(s);return n1;}int n;void check(){int tot=0;for(int i=0;i<n;i++)for(int j=0;j<6;j++)  color[i][dice24[r[i]][j]]=dice[i][j]; for(int j=0;j<6;j++) { int cnt[maxn*6]={0},maxcolor=0;  for(int i=0;i<n;i++) maxcolor=max(maxcolor,++cnt[color[i][j]]); tot+=n-maxcolor; } ans=min(ans,tot);}void dfs(int s){if(s==n) check();elsefor(int i=0;i<24;i++){r[s]=i;dfs(s+1);}}int main(){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("%d\n",ans);}return 0;}

0 0
原创粉丝点击