UVA 1030 Image Is Everything
来源:互联网 发布:java购物车系统代码 编辑:程序博客网 时间:2024/06/06 08:42
刘汝佳大神书上的原题,思路是寻找六个视图中颜色的冲突,只要发现方块的颜色在六个视图中产生了冲突,就把这个方块删掉,直到没有冲突发生时,整个大方阵的方块个数就是可以达到的最多的了。
#include <stdio.h>#include <string.h>#include <map>using namespace std;map<int, char> predict_arr;char arr[15][15][15]; //记录当前方阵哪些方块是存在的//各个面的视图char arr_front[15][15];char arr_left[15][15];char arr_back[15][15];char arr_right[15][15];char arr_top[15][15];char arr_bottom[15][15];int _hash(int x, int y, int z){return x + y * 15 + z*15*15;}void func(int n){int x, y, z, i, j;int hash_v;predict_arr.clear();bool conflict; //是否有冲突for(x=1; x<=n; x++)for(y=1; y<=n; y++)for(z=1; z<=n; z++)arr[x][y][z] = 1;//先把能看穿的部分的方块全部删掉for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(arr_front[i][j] == '.'){for(z = 1; z<=n; z++)arr[j][i][z] = 0;}}}for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(arr_left[i][j] == '.'){for(x=1; x<=n; x++)arr[x][i][n+1-j] = 0;}}}for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(arr_back[i][j] == '.'){for(z=1; z<=n; z++)arr[n+1-j][i][z] = 0;}}}for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(arr_right[i][j] == '.'){for(x=1; x<=n; x++)arr[x][i][j] = 0;}}}for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(arr_top[i][j] == '.'){for(y=1; y<=n; y++)arr[j][y][n+1-i] = 0;}}}for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(arr_bottom[i][j] == '.'){for(y=1; y<=n; y++)arr[j][y][i] = 0;}}}conflict = true;while(conflict){conflict = false;for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(arr_front[i][j] != '.'){z = 1;while(arr[j][i][z] != 1) z++;hash_v = _hash(j, i, z);if(predict_arr.find(hash_v) == predict_arr.end())predict_arr[hash_v] = arr_front[i][j];else if(predict_arr[hash_v] != arr_front[i][j]){arr[j][i][z] = 0;conflict = true;}}}}for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(arr_left[i][j] != '.'){x = 1;while(arr[x][i][n+1-j] != 1) x++;hash_v = _hash(x, i, n+1-j);if(predict_arr.find(hash_v) == predict_arr.end())predict_arr[hash_v] = arr_left[i][j];else if(predict_arr[hash_v] != arr_left[i][j]){arr[x][i][n+1-j] = 0;conflict = true;}}}}for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(arr_back[i][j] != '.'){z = n;while(arr[n+1-j][i][z] != 1) z--;hash_v = _hash(n+1-j, i, z);if(predict_arr.find(hash_v) == predict_arr.end())predict_arr[hash_v] = arr_back[i][j];else if(predict_arr[hash_v] != arr_back[i][j]){arr[n+1-j][i][z] = 0;conflict = true;}}}}for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(arr_right[i][j] != '.'){x = n;while(arr[x][i][j] != 1) x--;hash_v = _hash(x, i, j);if(predict_arr.find(hash_v) == predict_arr.end())predict_arr[hash_v] = arr_right[i][j];else if(predict_arr[hash_v] != arr_right[i][j]){arr[x][i][j] = 0;conflict = true;}}}}for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(arr_top[i][j] != '.'){y = 1;while(arr[j][y][n+1-i] != 1) y++;hash_v = _hash(j, y, n+1-i);if(predict_arr.find(hash_v) == predict_arr.end())predict_arr[hash_v] = arr_top[i][j];else if(predict_arr[hash_v] != arr_top[i][j]){arr[j][y][n+1-i] = 0;conflict = true;}}}}for(i=1; i<=n; i++){for(j=1; j<=n; j++){if(arr_bottom[i][j] != '.'){y = n;while(arr[j][y][i] != 1) y--;hash_v = _hash(j, y, i);if(predict_arr.find(hash_v) == predict_arr.end())predict_arr[hash_v] = arr_bottom[i][j];else if(predict_arr[hash_v] != arr_bottom[i][j]){arr[j][y][i] = 0;conflict = true;}}}}}int sum;sum = 0;for(x=1; x<=n; x++)for(y=1; y<=n; y++)for(z=1; z<=n; z++)if(arr[x][y][z])sum++;printf("Maximum weight: %d gram(s)\n", sum);}int main(void){int n, i, j;char buf[20];//freopen("input.dat", "r", stdin);while(scanf("%d", &n), n){for(i=1; i<=n; i++){for(j=1; j<=6; j++){scanf("%s", buf);switch(j){case 1:strcpy(arr_front[i]+1, buf);break;case 2:strcpy(arr_left[i]+1, buf);break;case 3:strcpy(arr_back[i]+1, buf);break;case 4:strcpy(arr_right[i]+1, buf);break;case 5:strcpy(arr_top[i]+1, buf);break;case 6:strcpy(arr_bottom[i]+1, buf);break;}}}func(n);}return 0;}
0 0
- Uva-1030-Image Is Everything
- Uva 1030 - Image Is Everything
- UVA 1030 Image Is Everything
- UVA-1030-Image Is Everything
- UVA 1030 Image Is Everything
- Uva 1030 Image Is Everything
- uva 1030 - Image Is Everything(乱搞)
- UVA 1030 - Image Is Everything(贪心枚举)
- 1030 - Image Is Everything
- uva 1030 - Image Is Everything(思维,4级)
- uva 1030 - Image Is Everything(迭代更新)
- 【简单题】【综合能力】UVA-1030-Image Is Everything
- uva 1030 Image Is Everything(迭代更新)
- 1030 - Image Is Everything (贪心)
- uvaoj 1030 - Image Is Everything
- World Finals 2004 / UVa 1030 Image Is Everything (想法题&迭代更新)
- Image Is Everything
- Image Is Everything
- cmd命令运行TOMCAT部署的网站
- UVa10048 Audiophobia
- JTabbedPane的选项卡自定义位置
- ffmpeg常见命令
- JROO JDBC,一个ORM急速开发框架
- UVA 1030 Image Is Everything
- SSDT HOOK,通过hook NtOpenProcess达到保护制定进程效果
- 程序解:现有3L容器和5L容器各一个,问如何量出4L水(水无限)
- 【Java编程】写入、读取、遍历Properties文件
- MySQL Cluster(MySQL 集群) 初试
- JQuery_JavaScript___闭包与作用域
- JAVA面试题解惑系列
- java数组合并问题
- QC9安装