Sicily 1094 Cude解题报告
这个题目是搜索指定矩阵中判断是否存在立方体的展开图,看似简单,其实情况复杂。
当然,如果你很懂立方体的展开图,这就是一道水题。
接下来说下立方体展开图的知识:
立体图形的相关问题可以转化为平面图形来研究,但是我的空间想象能力较差,只有通过探索总结出规律才能解决问题。
一、立方体平面展开图中的特点
1、当我们从立方体的某顶点出发,最多只能观察到三个面,这三个面中必包括三组相对面中的各一个,且两个相对的面不能被同时看到。
2、平面展开图形中的每一个正方形至少有一边与其他正方形相连。
3、立方体的平面展开图中一个公共顶点处最多只能出现三个正方形,与一个正方形相邻的正方形最多只能有四个。
4、立方体中原来处于相对位置上的两个面,展开后的正方形无公共顶点和公共边;反之,有公共顶点或公共边的两个正方形折叠成立方体后,必成为相邻面,不可能成为相对面。
二、立方体平面展开图的形式
立方体由6个大小完全相同的正方形组成,由于选择剪开的棱不一样,所以表面展开图有11种,可归类为:“141”型、“132”型、“222”型、“33”型四种。凡是出现“田”字形的一定不是,凡是出现“凹”字形的也一定不是,五连长链和六连长链均不是立方体的表面展开图。巧记立方体展开图,有一首小儿歌 。
中间4个一连串,两边各一随便放。
二三紧连错一个,三一相连一随便。
两两相连各错一,三个两排一对齐。
要找两个相对面,切记相隔一个面
示意图如上,当然还要考虑左右上下翻转的情况。
我是采用类似滤波器的暴力匹配,大神请忽略我。
代码如下:
#include <stdio.h>
#include <iostream>
using namespace std;int result[15] = {411,6,6,6,6,6,6,6,6,6,6,6,6,6,6};
int filter1[15][4][3] =
{//1{{10,100,1},{10,100,1},{10,100,1},{10,100,1}}//2,{{0,0,1},{1,1,1},{0,1,0},{0,1,0}}//3,{{0,1,0},{0,1,0},{1,1,1},{0,0,1}}//4,{{1,0,0},{1,1,1},{0,1,0},{0,1,0}}//5,{{0,1,0},{0,1,0},{1,1,1},{1,0,0}}//6,{{0,0,1},{0,1,1},{1,1,0},{0,1,0}}//7,{{0,1,0},{0,1,1},{1,1,0},{1,0,0}}//8,{{1,0,0},{1,1,0},{0,1,1},{0,1,0}}//9,{{0,1,0},{1,1,0},{0,1,1},{0,0,1}}//10,{{0,0,1},{0,1,1},{0,1,0},{1,1,0}}//11,{{0,1,1},{0,1,0},{1,1,0},{1,0,0}}//12,{{1,0,0},{1,1,0},{0,1,0},{0,1,1}}//13,{{1,1,0},{0,1,0},{0,1,1},{0,0,1}}//14,{{0,0,1},{0,1,1},{1,1,0},{1,0,0}}//15,{{1,0,0},{1,1,0},{0,1,1},{0,0,1}}
};int filter2[15][3][4] =
{{{1,1,1,1},{100,100,100,100},{10,10,10,10}}//,{{1,1,0,0},{0,1,1,1},{0,1,0,0}},{{0,0,1,0},{1,1,1,0},{0,0,1,1}},{{0,0,1,1},{1,1,1,0},{0,0,1,0}},{{0,1,0,0},{0,1,1,1},{1,1,0,0}}//,{{1,1,0,0},{0,1,1,1},{0,0,1,0}},{{0,1,0,0},{1,1,1,0},{0,0,1,1}},{{0,0,1,1},{1,1,1,0},{0,1,0,0}},{{0,0,1,0},{0,1,1,1},{1,1,0,0}}//,{{1,1,0,0},{0,1,1,1},{0,0,0,1}},{{1,0,0,0},{1,1,1,0},{0,0,1,1}},{{0,0,1,1},{1,1,1,0},{1,0,0,0}},{{0,0,0,1},{0,1,1,1},{1,1,0,0}}//,{{1,1,0,0},{0,1,1,0},{0,0,1,1}},{{0,0,1,1},{0,1,1,0},{1,1,0,0}}};int filter3[2][2][5] =
{{{1,1,1,0,0},{0,0,1,1,1}},{{0,0,1,1,1},{1,1,1,0,0}}};int filter4[2][5][2] =
{{{0,1},{0,1},{1,1},{1,0},{1,0}},{{1,0},{1,0},{1,1},{0,1},{0,1}}};int main()
{int flag;int i;int j;int k;int sum;int m;int n;char temp;int board[11][11];int counter = 0;while(cin>>temp){counter++;flag = 0;if(temp == 'r'){board[0][0] = 1;}else{board[0][0] = 0;}for(i = 0; i < 10; i++){for(j = 0; j < 10; j++){if(i == 0 && j == 0){;}else{scanf("%c", &temp);if(temp == 'r'){board[i][j] = 1;}else{board[i][j] = 0;}}}scanf("%c", &temp);}//for(i = 0; i < 10; i++)//{// for(j = 0; j < 10; j++)// printf("%d", board[i][j]);// printf("\n");//}for(k = 0; k < 15 && flag != 1; k++){for(i = 0; i < 10 && flag != 1; i++){for(j = 0; j < 10 && flag != 1; j++){if(i + 2 < 10 && j + 3 < 10){ sum = 0;for(m = 0; m < 3; m++){for(n = 0; n < 4; n++){sum += filter2[k][m][n] * board[i + m][j + n];}}}if(sum == result[k]){//printf("match %d@@@%d %d\n", k, i, j);flag = 1;sum = 0;break;}}}}for(k = 0; k < 15 && flag != 1; k++){for(i = 0; i < 10 && flag != 1; i++){for(j = 0; j < 10 && flag != 1; j++){if(i + 3 < 10 && j + 2 < 10){ sum = 0;for(m = 0; m < 4; m++){for(n = 0; n < 3; n++){sum += filter1[k][m][n] * board[i + m][j + n];}}}if(sum == result[k]){//printf("match %d@@@%d %d\n", k, i, j);flag = 1;sum = 0;break;}}}}for(k = 0; k < 2 && flag != 1; k++){for(i = 0; i < 10 && flag != 1; i++){for(j = 0; j < 10 && flag != 1; j++){if(i + 1 < 10 && j + 4 < 10){ sum = 0;for(m = 0; m < 2; m++){for(n = 0; n < 5; n++){sum += filter3[k][m][n] * board[i + m][j + n];}}}if(sum == 6){//printf("match %d@@@%d %d\n", k, i, j);flag = 1;sum = 0;break;}}}}for(k = 0; k < 2 && flag != 1; k++){for(i = 0; i < 10 && flag != 1; i++){for(j = 0; j < 10 && flag != 1; j++){if(i + 4 < 10 && j + 1 < 10){ sum = 0;for(m = 0; m < 5; m++){for(n = 0; n < 2; n++){sum += filter4[k][m][n] * board[i + m][j + n];}}}if(sum == 6){//printf("match %d@@@%d %d\n", k, i, j);flag = 1;sum = 0;break;}}}}if(flag == 1){printf("Board %d: red squares can be folded into a cube\n", counter);}else{printf("Board %d: impossible\n", counter);}}return 0;
}
Sicily 1094 Cude解题报告相关推荐
- uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)
线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报 分类: ...
- 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...
- 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 解题报告(十三)中国剩余定理(ACM / OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 解题报告(四)生成函数(ACM/ OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 解题报告(一)E、(BZOJ4589)Hard Nim(博弈论 + FWT)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 解题报告(五)组合计数(ACM / OI)超高质量题解
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 解题报告(二)E、(BZOJ3513) [MUTC2013] idiots(生成函数 + FFT + 组合计数)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
最新文章
- Python Day23 stark组件1
- WebForms 开发基础
- 21 个非常有用的 .htaccess 提示和技巧
- Easyui入门视频教程 第11集---Window的使用
- elk 搜索 语法_ELK:kibana使用的lucene查询语法
- oracle关闭 manager,Oracle Enterprise Manager 11g 启停
- WPF 右下角弹窗的简单实现
- (转)在MAC上查找和设置$JAVA_HOME
- mysql 忘记密码
- Windows 操作小技巧 之一(持续更新)
- 【元胞自动机】基于matlab元胞自动机生命游戏【含Matlab源码 655期】
- 南阳理工ACM954--N!
- 任正非:股权激励拯救了华为!
- IsKindOf的用法简介
- N个球放M个盒子问题
- 【spring】spring 的事务(transaction) 四 嵌套事务PROPAGATION_NESTED
- 单片机实例1——闪烁灯(硬件电路图+汇编程序+C语言程序)
- #蓝桥杯真题【思特奇杯·云上蓝桥-算法集训营】第2周
- “梵高。向日葵”为什么值3亿
- 怎么给网页中的Flash上加超连接