[Elite 2008 Dec USACO]Jigsaw Puzzles
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define Up num[0]
#define Right num[1]
#define Down num[2]
#define Left num[3] char ca,cb,cc,cd;
int r,c,rc;
bool v[]; class Jigsaw
{
public:
int serialNumber;
char num[];
public:
void readIn()
{
scanf("%d%*c%c%*c%c%*c%c%*c%c%*c",&serialNumber,num,num+,num+,num+);
}
void printOut()
{
printf("%d %c %c %c %c\n",serialNumber,num[],num[],num[],num[]);
}
int checkCorner()
{
int i;
for (i=; i<; i++)
{
if (num[i] == '' && num[(i+)%] == '')
return i;
}
return -;
}
int checkSuit2c()
{
int i;
for (i=; i<; i++)
{
if (num[i] == ca && num[(i+)%] == cb)
return i;
}
return -;
}
int checkSuit3c()
{
int i;
for (i=; i<; i++)
{
if (num[i] == ca && num[(i+)%] == cb && num[(i+)%] == cc)
return i;
}
return -;
}
int checkSuit4c()
{
int i;
for (i=; i<; i++)
{
if (num[i] == ca && num[(i+)%] == cb && num[(i+)%] == cc)
return i;
}
return -;
}
};
Jigsaw js[];
Jigsaw tb[][];
bool check_and_rotate(int x,int y,int d)
{
int t;
if (x == && y == )
{
t=js[d].checkCorner();
if (t == -)
return false;
tb[x][y].serialNumber=js[d].serialNumber;
tb[x][y].Left=js[d].num[t];
tb[x][y].Up=js[d].num[(t+)%];
tb[x][y].Right=js[d].num[(t+)%];
tb[x][y].Down=js[d].num[(t+)%];
return true;
}
if (x == )
cb='';
else
cb=tb[x-][y].Down;
if (y == )
ca='';
else
ca=tb[x][y-].Right;
if (y == c-)
{
cc='';
t=js[d].checkSuit3c();
if (t == -)
return false;
tb[x][y].serialNumber=js[d].serialNumber;
tb[x][y].Left=js[d].num[t];
tb[x][y].Up=js[d].num[(t+)%];
tb[x][y].Right=js[d].num[(t+)%];
tb[x][y].Down=js[d].num[(t+)%];
return true;
}
else if (x == r-)
{
cc='';
t=js[d].checkSuit4c();
if (t == -)
return false;
tb[x][y].serialNumber=js[d].serialNumber;
tb[x][y].Left=js[d].num[t];
tb[x][y].Up=js[d].num[(t+)%];
tb[x][y].Right=js[d].num[(t+)%];
tb[x][y].Down=js[d].num[(t+)%];
return true;
}
else
{
t=js[d].checkSuit2c();
if (t == -)
return false;
tb[x][y].serialNumber=js[d].serialNumber;
tb[x][y].Left=js[d].num[t];
tb[x][y].Up=js[d].num[(t+)%];
tb[x][y].Right=js[d].num[(t+)%];
tb[x][y].Down=js[d].num[(t+)%];
return true;
}
return false;
}
bool DFS(int x,int y)
{
int i,j;
if (y == c)
{
x++;
y=;
if (x == r)
{
for (i=; i<r; i++)
{
for (j=; j<c; j++)
{
tb[i][j].printOut();
}
}
return true;
}
return DFS(x,y);
}
for (i=; i<rc; i++)
{
if (v[i] == true)
continue;
if (check_and_rotate(x,y,i) == true)
{
v[i]=true;
if (DFS(x,y+) == true)
return true;
v[i]=false;
}
}
return false;
}
int main()
{
int i,j;
scanf("%d%d",&r,&c);
rc=r*c;
for (i=; i<rc; i++)
{
js[i].readIn();
v[i]=false;
}
DFS(,);
return ;
}
USACO Elite 2008 December Competition Silver
题意:给你一些正方形的拼图碎块,每个碎块有四个边,每边都有一个记号,分别是小写字母a-z。其中没有标记的边,也就是边界的边用'0'标记。题目给定一个矩阵,把这些碎块放进去,要求每个边相接的记号必须一样,边界上的边必须是'0'。
解法:DFS。这个操作起来还是挺麻烦的,做处理的时候要小心一些。
[Elite 2008 Dec USACO]Jigsaw Puzzles的更多相关文章
- [usaco] 2008 Dec Largetst Fence 最大的围栏 2 || dp
原网站大概已经上不了了-- 题目大意: 求出平面上n个点组成的一个包含顶点数最多的凸多边形.n<=250. 考虑我们每次枚举凸包的左下角为谁(参考Graham求凸包时的左下角),然后像Graha ...
- BZOJ 1606 USACO 2008 Dec. 购买干草
[题意概述] 有n件物品,每件物品有体积Vi,背包容量为C,问最多可以装多少体积的物品 [题解] 显然是个无限背包嘛.. 直接做背包DP就好 注意无限背包的写法和01背包的区别 #include< ...
- 【洛谷P2927 [USACO08DEC]拼图游戏Jigsaw Puzzles】深搜
其实,随便搜了一搜就可以AC了!!! - - 亏我纠结了这么久= = #include<cstdio> #include<cstdlib> #include<cstrin ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Self-Supervised Representation Learning
Self-Supervised Representation Learning 2019-11-11 21:12:14 This blog is copied from: https://lilia ...
- LOJ10199轻拍牛头
题目描述 原题来自:USACO 2008 Dec. Silver 今天是 Bessie 的生日,并且现在是聚会的游戏时间.Bessie 让编号为 1~N 的 N 头奶牛围成一个圈坐(所以除了最后一头牛 ...
- tcmalloc资料
1. 确定dylib在max os是可以成功的. http://lists.apple.com/archives/perfoptimization-dev/2008/Dec/msg00002.html ...
- ICCV 2017论文分析(文本分析)标题词频分析 这算不算大数据 第一步:数据清洗(删除作者和无用的页码)
IEEE International Conference on Computer Vision, ICCV 2017, Venice, Italy, October 22-29, 2017. IEE ...
- 2016CVPR论文集
http://www.cv-foundation.org/openaccess/CVPR2016.py ORAL SESSION Image Captioning and Question Answe ...
随机推荐
- 关于mysql中GROUP_CONCAT函数的使用
偶然看到公司存储过程中有个字符串拼接的函数,改bug过程中使用到了,还挺有用的,于是记录下来方便记忆,帮助有需要的人. 这是我需要整理的串,他是调用了一个存储过程,传入组织机构的id和迭代层数,返回来 ...
- [iOS] Edit / Memo 原生控件才提供拼字检查
在 iOS 平台提供了英文拼字检查,但需将 ControlType 设定为 Platform 才能使用: 效果:
- 20145207 Exp9 web安全基础实践
Exp9 web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 攻击原理:修改信息 防御:禁止输入 (2)XSS攻击的原理,如何防御 攻击原理:看别人的博客,感觉就是强制访问. 防御 ...
- 如何查看win2003是32位还是64位
如何查看自己的电脑是32位还是64位 方法如下: 点击开始——运行——输入wmic cpu get addresswidth
- 在CMD 中,如何切换python2.x 版本 和 python3.x版本?
1.cmd中输入python,启动python2.x版本,如何切换呢? 2.找到python2.x安装路径,修改python.exe名称为:python27.exe 3. 打开cmd,输入python ...
- 4569: [Scoi2016]萌萌哒
4569: [Scoi2016]萌萌哒 链接 分析: 每次给出的两个区间长度是一样的,对应位置的数字也是一样的,那么可以将两两对应的数字用并查集合并,设最后有$cnt$个不同的集合,答案就是$9\ti ...
- 接口测试中抓包工具Charles的使用
在被测接口并没有明确的接口文档给出时,我们需要借助抓包工具来帮助测试,利用抓包工具我们几乎可以获得接口文档中能给你的一切.常见的抓包工具有Charles和Fiddler, Fiddler只能用在Win ...
- 自己编写的:centos6.6上编译安装apache2.4+php5.6+mysql5.6【亲自】
在centos6.6上安装apache2.4+php5.6+mysql5.6 关于wget的安装 将之前装系统的.iso文件挂载到光驱 由于我在/home/jinnan/下建立了一个cdrom文件夹 ...
- X509证书申请以及PKCS#10 详解
一.证书颁发 1.单证书的签发 1) 用户填写信息注册(或者由RA的业务操作员注册用户). 2) 用户信息传递到RA. 3) RA审核通过. 4) 用户请求发证. 5) RA审核通过. 6) 用户签发 ...
- Hadoop初步简介
Hadoop产生背景: 传统方式,我们使用数据库来对数据进行管理.可是随着数据量的增加,我们要对这个数据库中的海量数据进行处理, 从中提取出有效的信息,这时候面临的问题随之而来: 1.海量数据读取,采 ...