UVALive 3401 彩色立方体
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1402
http://7xjob4.com1.z0.glb.clouddn.com/53f6b2526cc5a59ec7881a8fd6d899bd
题意:将n个原有颜色的立方体涂尽量少次使立方体都相同;
思路:枚举除第一个面外每个立方体的姿态(24种),姿态由旋转方式先处理得到,再枚举每一个对应面记录要涂的数量。
处理代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int lleft[7]={0,2,6,3,4,1,5}; 5 int up[7]={0,4,2,1,6,5,3}; 6 7 void rot(int *T,int *p) 8 { 9 int q[7]; 10 for(int i=1;i<=6;i++) 11 { 12 q[i]=p[i]; 13 } 14 15 for(int i=1;i<=6;i++) 16 { 17 p[i]=q[T[i]]; 18 } 19 } 20 21 int main() 22 { 23 int p0[7]={0,1,2,3,4,5,6}; 24 25 printf("int dice[25][7]= {\n{0},\n"); 26 for(int i=1;i<=6;i++) 27 { 28 int p[7]; 29 for(int j=0;j<=6;j++) 30 p[j]=p0[j]; 31 32 if(i==1) rot(up,p); 33 if(i==2) { rot(lleft,p); rot(up,p); } 34 35 if(i==4) { rot(up,p);rot(up,p); } 36 if(i==5) { rot(lleft,p);rot(lleft,p);rot(lleft,p);rot(up,p); } 37 if(i==6) { rot(lleft,p);rot(lleft,p);rot(up,p); } 38 39 for(int j=1;j<=4;j++) 40 { 41 printf("{%d,%d,%d,%d,%d,%d,%d},",p[0],p[1],p[2],p[3],p[4],p[5],p[6]); 42 rot(lleft,p); 43 } 44 printf("\n"); 45 } 46 printf("}; \n"); 47 }
View Code
计算代码:
1 #include <bits/stdc++.h> 2 #include <iostream> 3 using namespace std; 4 5 int dice[25][7]= { 6 {0}, 7 {0,4,2,1,6,5,3},{0,2,3,1,6,4,5},{0,3,5,1,6,2,4},{0,5,4,1,6,3,2}, 8 {0,4,6,2,5,1,3},{0,6,3,2,5,4,1},{0,3,1,2,5,6,4},{0,1,4,2,5,3,6}, 9 {0,1,2,3,4,5,6},{0,2,6,3,4,1,5},{0,6,5,3,4,2,1},{0,5,1,3,4,6,2}, 10 {0,6,2,4,3,5,1},{0,2,1,4,3,6,5},{0,1,5,4,3,2,6},{0,5,6,4,3,1,2}, 11 {0,4,1,5,2,6,3},{0,1,3,5,2,4,6},{0,3,6,5,2,1,4},{0,6,4,5,2,3,1}, 12 {0,4,5,6,1,2,3},{0,5,3,6,1,4,2},{0,3,2,6,1,5,4},{0,2,4,6,1,3,5}, 13 }; 14 15 int n,ans; 16 int color[5][7],state[5]; 17 vector <string> colorname; 18 19 int colorid(char str[]) 20 { 21 int i,j; 22 string s(str); 23 int m=colorname.size(); 24 for(i=0;i<m;i++) 25 { 26 if(colorname[i]==s) 27 { 28 return i; 29 } 30 } 31 colorname.push_back(s); 32 return m; 33 } 34 35 void cal() 36 { 37 int i,j; 38 int num=0,maxnum; 39 map <int,int> cn; 40 for(j=1;j<=6;j++) 41 { 42 cn.clear(); 43 maxnum=0; 44 for(i=1;i<=n;i++) 45 { 46 int cnam=color[i][dice[state[i]][j]]; 47 cn[cnam]++; 48 if(cn[cnam]>maxnum) 49 maxnum=cn[cnam]; 50 } 51 num+=(n-maxnum); 52 } 53 if(ans>num) 54 ans=num; 55 } 56 57 void dfs(int m) 58 { 59 int i,j; 60 if(m==n) 61 { 62 cal(); 63 return; 64 } 65 for(i=1;i<=24;i++) 66 { 67 state[m+1]=i; 68 dfs(m+1); 69 } 70 } 71 int main() 72 { 73 char str[30]; 74 int i,j; 75 while(scanf("%d",&n)!=EOF && n!=0) 76 { 77 colorname.clear(); 78 for(i=1;i<=n;i++) 79 { 80 for(j=1;j<=6;j++) 81 { 82 scanf("%s",str); 83 color[i][j]=colorid(str); 84 } 85 } 86 87 if(n==1) 88 { 89 ans=0; 90 } 91 else 92 { 93 ans=24; 94 state[1]=9; 95 dfs(1); 96 } 97 98 printf("%d\n",ans); 99 } 100 return 0; 101 } 102 103 /* 104 for(i=1;i<=n;i++) 105 { 106 for(j=1;j<=6;j++) 107 { 108 printf("%s ",color[i][j]); 109 } 110 printf("\n"); 111 } 112 if(strcmp(color[1][2],color[2][3])==0) 113 { 114 printf("yes\n"); 115 } 116 */
View Code
转载于:https://www.cnblogs.com/cyd308/p/5644783.html
UVALive 3401 彩色立方体相关推荐
- 【Qt for Android】OpenGL ES 绘制彩色立方体
Qt 内置对OpenGL ES的支持.选用Qt进行OpenGL ES的开发是很方便的,很多辅助类都已经具备.从Qt 5.0開始添加了一个QWindow类,该类既能够使用OpenGL绘制3D图形,也能够 ...
- 逐梦旅程学习笔记 DirectX开发入门02:旋转的彩色立方体
本文是 系列笔记DirectX部分的第2篇,上一篇参见 逐梦旅程学习笔记 DirectX开发入门01:应用程序基本框架 这个示例增加了一些实际的内容,首先是绘制一个颜色随机变幻的彩色立方体,其二是显示 ...
- 现代OpenGL教程(三):绘制彩色立方体(imgui+OpenGL3.3)
前言:imgui 是一个开源的GUI框架,自带的例子里面直接集成了glfw+gl3w环境,本例使用的版本是imgui v1.61,下载地址:https://github.com/ocornut/img ...
- HTML+CSS炫酷彩色立方体特效
源码视频教程 HTML+CSS炫酷彩色立方体 HTML代码 <!DOCTYPE html> <html lang="en"><head>< ...
- D3D11无双(2):渲染一个3D彩色立方体
渲染一个彩色立方体,这是个很经典的案例,上一篇文章成功地渲染了一个三角形,这次是个3D对象. (注:blog: http://blog.csdn.net/booirror) 3D空间 对象空间:对象空 ...
- OpenGL 入门基础教程 —— 彩色立方体
参考资料:http://www.opengl-tutorial.org/cn/beginners-tutorials/tutorial-4-a-colored-cube/ 知识点1:顶点属性缓冲.色彩 ...
- 用webgl绘制一个彩色旋转立方体
#用webgl绘制一个旋转立方体 ** 学习交流欢迎加群:789723098,博主会将一些demo整理共享 ** 今天给大家分享一个用webgl写的简单的三维场景:转动的交互式彩色立方体,其六个面的颜 ...
- 数字图像处理:第十八章 彩色图象处理
第十八章 彩色图象处理 目录 1. 引言 2. 彩色空间 3. 不同彩色空间之间的转换 4. 彩色图象的分割 作业 1. 引言 彩色图象是多光谱图象的一种特殊情况,对应于人类 ...
- (四)使用OpenCV实现图像彩色模型转换
(四)使用OpenCV实现图像彩色模型转换 全文介绍部分引自<数字图像处理>第六章 1.彩色基础 彩色光在电磁波中的波长范围是400-700nm.人眼中的锥状体负责色觉的感知,实验发现,人 ...
最新文章
- 下一版本Windowsreg; CE 开发工具Smart Device Extensions for Microsoft Visual Studioreg; .NET...
- python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法,python素数...
- 即时通讯下数据粘包、断包处理实例(基于CocoaAsyncSocket)
- JavaScript定时器的工作原理(翻译)
- 怎么修剪_夹竹桃怎么养?这样“修剪”一下,一年开3、4次花,花大色艳
- java等待_Java学习:等待唤醒机制
- python csdn博客_GitHub - 1783955902/CSDNBlogBackup: Python实现CSDN博客的完整备份
- [BZOJ2655] calc
- 大数据揭示90后爱情观,“有钱”只能排最后
- Java快速开发框架LML简介
- tomcat有集成mysql嘛_jira+tomcat+mysql的集成
- (100)FPGA单沿和双沿采样(下降沿采样)
- 对象存储 OSS > 开发指南 > 存储类型 > 存储类型介绍
- LINUX yum用法
- java this 方法,使用“this”用方法(用Java)
- python服务器搭建qt搭建客户端_利用PythonQT,定制服务器启动工具
- HTML转义字符参照表
- PyQt、PySide、PySide2这三者到底有什么区别?
- 异名童鞋的微信小游戏性能优化
- java代码实现注册发送邮件激活账户