题意:

   总共有6个2*2的正方形,判断是否能够成所给的形状。

思路:

  一个正方形总共有9种摆放方式,对于整个地图来说摆放方式总共有2的9次方种摆放方式。然后将地图用9*5的数组表示,正方形的位置用其8个边的下标和4个中空的下标表示。

代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int bian[9][8]={
{1,3,9,13,18,19,21,22},
{3,5,11,15,20,21,23,24},
{5,7,13,17,22,23,25,26},
{10,12,18,22,27,28,30,31},
{12,14,20,24,29,30,32,33},
{14,16,22,26,31,32,34,35},
{19,21,27,31,36,37,39,40},
{21,23,29,33,38,39,41,42},
{23,25,31,35,40,41,43,44}};//2*2正方形的9种摆放方式的边坐标
int nei[9][4]={
10,11,12,20,
12,13,14,22,
14,15,16,24,
19,20,21,29,
21,22,23,31,
23,24,25,33,
28,29,30,38,
30,31,32,40,
32,33,34,42};//2*2正方形的9种摆放方式的中空坐标
char str[100];
int map[45],cot[10],map1[45];
int read()//读入数据
{
int h=0,cnt = 0, kk = 0;
for(int i=0;i<5;i++)
{
if(gets(str)==NULL)
return -1;
if(str[0]=='0')
return -1;
for(int j=0;j<9;j++)
{
map[kk++]=str[j] ==32?0:1;
if(str[j] != 32)
cnt++;
}
}
return cnt;
}
int count(int s)//计算总共使用了几个正方形
{
return s==0?0:count(s/2)+(s&1);
}
void stick(int p,int &cnt)//构建将第p个正方形贴上去后的地图
{
int i,j;
for(i=0;i<8;i++)
{
if(map1[bian[p][i]]==0)//第p个正方形边的位置如果没有边的话,边的数量+1
cnt++;
map1[bian[p][i]]=1;
}
for(i=0;i<4;i++)
{
if(map1[nei[p][i]]==1)//第p个正方形中空的位置如果有边的话,边的数量-1
            cnt--;
map1[nei[p][i]]=0;
}
}
int main()
{
int flag,cnt;
int i,j,k;
int h=1;
while((flag=read())&&flag!=-1)
{
//cout<<flag<<endl;
int flag1=0;
for(i=0;i<(1<<9);i++)
{
int n=count(i);
if(n>6||8*n<flag)
continue;
k=0;
for(j=0;j<9;j++)
if((i>>j)&1)
cot[k++]=j;
//cout<<k<<endl;
do
{
//cout<<1<<endl;
memset(map1,0,sizeof(map1));
cnt=0;
//cout<<n<<endl;
for(j=0;j<n;j++)
{
int p=cot[j];//cout<<1<<endl;
stick(p,cnt);
}
                if(cnt==flag)
{
int flag2=1;
for(int l=0;l<45;l++)
{
if(map[l]!=map1[l])
{
flag2=0;break;
                        }
                    }if(flag2)
flag1=1;
                }
if(flag1)
break;
}
while(next_permutation(cot,cot+k));
}
printf("Case %d: %s\n",h++, flag1? "Yes" : "No");
}
return 0;
}

UVA 12113 Overlapping Squares的更多相关文章

  1. UVA - 12113 Overlapping Squares(dfs+回溯)

    题目: 给定一个4*4的棋盘和棋盘上所呈现出来的纸张边缘,问用不超过6张2*2的纸能否摆出这样的形状. 思路: dfs纸的张数,每一张中枚举这张纸左上角这个点的位置,暴力解题就可以了. 这个题的覆盖太 ...

  2. UVA - 12113 Overlapping Squares(重叠的正方形)

    题意:给定一个4*4的棋盘和棋盘上所呈现出来的纸张边缘,问用不超过6张2*2的纸能否摆出指定的形状. 分析:2*2的纸在4*4的棋盘上总共有9种放置位置,枚举所有的放置位置即可.枚举情况总共种. #p ...

  3. 【习题 7-6 UVA - 12113】Overlapping Squares

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 先预处理出来一个正方形. 然后每次枚举新加的正方形左上角的坐标就可以. 注意覆盖的规则,控制一下就可以. 然后暴力判断是否相同. 暴 ...

  4. 【UVA】201 Squares(模拟)

    题目 题目     分析 记录一下再预处理一下.     代码 #include <bits/stdc++.h> int main() { int t=0,s,n; while(scanf ...

  5. UVA-12113 Overlapping Squares (回溯+暴力)

    题目大意:问能不能用不超过6张2x2的方纸在4x4的方格中摆出给定的图形? 题目分析:暴力枚举出P(9,6)种(最坏情况)方案即可. 代码如下: # include<iostream> # ...

  6. LA 3790 Overlapping Squares DFS

    题意: 给出一个字符矩阵,问能否是不超过6个2×2的正方形组成的. 分析: 每次找一个最表面的正方形然后DFS就好了. 一个正方形被移开后,用一个特殊符号标记上,下次再匹配的时候就直接忽略这些位置. ...

  7. Detecting diabetic retinopathy in eye images

    Detecting diabetic retinopathy in eye images The past almost four months I have been competing in a  ...

  8. ACM-ICPC Dhaka Regional 2012 题解

    B: Uva: 12582 - Wedding of Sultan 给定一个字符串(仅由大写字母构成)一个字母表示一个地点,经过这个点或离开这个点都输出这个地点的字母) 问: 每一个地点经过的次数(维 ...

  9. UVa 201 Squares

    题意: 给出这样一个图,求一共有多少个大小不同或位置不同的正方形. 分析: 这种题一看就有思路,最开始的想法就是枚举正方形的位置,需要二重循环,枚举边长一重循环,判断是否为正方形又需要一重循环,复杂度 ...

随机推荐

  1. NPOI通过DataTable导出和读取Excel

    Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你得 ...

  2. 软件测试作业三 尝试使用JUnit

    写一个判断三角形种类的代码,对其进行测试. 判断三角形代码: package 测试1; public class sjx { public String f(int a,int b,int c) { ...

  3. (转) launch failed.Binary not found in Linux/Ubuntu解决方案

    原地址: http://blog.csdn.net/abcjennifer/article/details/7573916 Linux下出现launch failed.Binary not found ...

  4. codeforces 340E Iahub and Permutations(错排or容斥)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Iahub and Permutations Iahub is so happy ...

  5. 整合spring2 + struts1.2 + hibernate3.2 .

    1 可恶的myeclipse     为了开发方便,我选择了myeclipse,因为它集成了很多框架,而不致于自己去倒入很多lib.但就是因为这一点,成了我这次组合的致命伤.SSH因为其是开源框架,自 ...

  6. symfony配置

    1.获取配置的一些变量 在HttpFoundation/Kernel.php 文件里面有函数 getKernelParameters ()可以获取一些配置变量的数组.有需要可以从那里获取. 2.配置s ...

  7. zabbix 通过gateway 获取远程主机的JMX信息

    DBHost=192.168.32.55 DBName= zabbix DBUser=zabbixuser DBPassword=zabbixpass StartTrappers=20 MaxHous ...

  8. < IOS > IOS适配,简单的分析解决一下

    版权:张英堂 欢迎转载,转载请注明出处. 做的项目很多,一到适配的时候头就大了,IOS6,7的适配,屏幕的适配,当然还有下一步要出4.7屏幕,也要做适配....悲剧的移动端的人员. 怎么做一个通用的适 ...

  9. 学习DSP(三)安装C2833x/C2823x C/C++ 头文件和外设示例-压缩包

    进入http://www.ti.com.cn/product/cn/tms320f28335 下载C2833x/C2823x C/C++ 头文件和外设示例 即SPRC530,目前最新版本是V131.安 ...

  10. fourinone分布式缓存研究和Redis分布式缓存研究

    最近在写一个天气数据推送的项目,准备用缓存来存储数据.下面分别介绍一下fourinone分布式缓存和Redis分布式缓存,然后对二者进行对比,以供大家参考. 1  fourinone分布式缓存特性 1 ...