解题报告 noi 2005 智慧珠游戏(BT 搜索)
智慧珠游戏
【问题描述】
智慧珠游戏拼盘由一个三角形盘件和12个形态各异的零件组成。拼盘的盘件如图1所示:
图1 |
12个零件按珠子数分3大类:
第1大类,有三个珠子,只有一种形状。
符号为A,形状为 |
第2大类,有4个珠子,有3种形状。
符号为B,形状为 |
|
符号为C,形状为 |
|
符号为D,形状为 |
第3大类,有5个珠子,有8种形状。
符号为E,形状为 |
|
符号为F,形状为 |
|
符号为G,形状为 |
|
符号为H,形状为 |
|
符号为I,形状为 |
|
符号为J,形状为 |
|
符号为K,形状为 |
|
符号为L,形状为 |
图2 |
图2示出了一种拼盘方案。为便于描述可将图2抽象为图3,就可以用一个数据为字符的二维数组来表示了。
B |
|||||||||
B |
K |
||||||||
B |
K |
K |
|||||||
B |
J |
K |
K |
||||||
J |
J |
J |
D |
D |
|||||
G |
J |
G |
D |
D |
C |
||||
G |
G |
G |
C |
C |
C |
I |
|||
E |
E |
E |
H |
H |
I |
I |
A |
||
E |
L |
H |
H |
H |
I |
A |
A |
F |
|
E |
L |
L |
L |
L |
I |
F |
F |
F |
F |
图3 |
对于由珠子构成的零件,可以放到盘件的任一位置,条件是能有地方放,且尺寸合适,所有的零件都允许旋转(0º、90º、180º、270º)和翻转(水平、竖直)。
现给出一个盘件的初始布局,求一种可行的智慧珠摆放方案,使所有的零件都能放进盘件中。
【输入格式】
文件中包含初始的盘件描述,一共有10行,第i行有i个字符。如果第i行的第j个字符是字母”A”至”L”中的一个,则表示第i行第j列的格子上已经放了零件,零件的编号为对应的字母。如果第i行的第j个字符是”.”,则表示第i行第j列的格子上没有放零件。
输入保证预放的零件已摆放在盘件中。
【输出格式】
如果能找到解,向输出文件打印10行,为放完全部12个零件后的布局。其中,第i行应包含i个字符,第i行的第j个字符表示第i行第j列的格子上放的是哪个零件。
如果无解,输出单独的一个字符串‘No solution’(不要引号,请注意大小写)。
所有的数据保证最多只有一组解。
【输入样例】
.
..
...
....
.....
.....C
...CCC.
EEEHH...
E.HHH....
E.........
【输出样例】
B
BK
BKK
BJKK
JJJDD
GJGDDC
GGGCCCI
EEEHHIIA
ELHHHIAAF
ELLLLIFFFF
const
trynum=1750000;
pnum:array ['A'..'L'] of longint=(3,4,4,4,5,5,5,5,5,5,5,5);//每种零件共多少个珠子
snum:array ['A'..'L'] of longint=(4,2,8,1,4,8,4,8,8,1,4,8);//每种零件共多少种放置方法
shape:array ['A'..'L',1..8,1..5,1..2] of longint=(
//A
(
{1}((0,0),(0,1),(1,0),(0,0),(0,0)),
{2}((0,0),(0,1),(1,1),(0,0),(0,0)),
{3}((0,0),(1,0),(1,-1),(0,0),(0,0)),
{4}((0,0),(1,0),(1,1),(0,0),(0,0)),
{5}((0,0),(0,0),(0,0),(0,0),(0,0)),
{6}((0,0),(0,0),(0,0),(0,0),(0,0)),
{7}((0,0),(0,0),(0,0),(0,0),(0,0)),
{8}((0,0),(0,0),(0,0),(0,0),(0,0))
),
//B
(
{1}((0,0),(0,1),(0,2),(0,3),(0,0)),
{2}((0,0),(1,0),(2,0),(3,0),(0,0)),
{3}((0,0),(0,0),(0,0),(0,0),(0,0)),
{4}((0,0),(0,0),(0,0),(0,0),(0,0)),
{5}((0,0),(0,0),(0,0),(0,0),(0,0)),
{6}((0,0),(0,0),(0,0),(0,0),(0,0)),
{7}((0,0),(0,0),(0,0),(0,0),(0,0)),
{8}((0,0),(0,0),(0,0),(0,0),(0,0))
),
//C
(
{1}((0,0),(0,1),(0,2),(1,0),(0,0)),
{2}((0,0),(0,1),(1,1),(2,1),(0,0)),
{3}((0,0),(1,0),(1,-1),(1,-2),(0,0)),
{4}((0,0),(1,0),(2,0),(2,1),(0,0)),
{5}((0,0),(0,1),(0,2),(1,2),(0,0)),
{6}((0,0),(1,0),(2,0),(2,-1),(0,0)),
{7}((0,0),(1,0),(1,1),(1,2),(0,0)),
{8}((0,0),(0,1),(1,0),(2,0),(0,0))
),
//D
(
{1}((0,0),(1,0),(1,1),(0,1),(0,0)),
{2}((0,0),(0,0),(0,0),(0,0),(0,0)),
{3}((0,0),(0,0),(0,0),(0,0),(0,0)),
{4}((0,0),(0,0),(0,0),(0,0),(0,0)),
{5}((0,0),(0,0),(0,0),(0,0),(0,0)),
{6}((0,0),(0,0),(0,0),(0,0),(0,0)),
{7}((0,0),(0,0),(0,0),(0,0),(0,0)),
{8}((0,0),(0,0),(0,0),(0,0),(0,0))
),
//E
(
{1}((0,0),(1,0),(2,0),(2,1),(2,2)),
{2}((0,0),(1,0),(2,0),(0,1),(0,2)),
{3}((0,0),(0,1),(0,2),(1,2),(2,2)),
{4}((0,0),(1,0),(2,0),(2,-1),(2,-2)),
{5}((0,0),(0,0),(0,0),(0,0),(0,0)),
{6}((0,0),(0,0),(0,0),(0,0),(0,0)),
{7}((0,0),(0,0),(0,0),(0,0),(0,0)),
{8}((0,0),(0,0),(0,0),(0,0),(0,0))
),
//F
(
{1}((0,0),(0,1),(1,1),(0,2),(0,3)),
{2}((0,0),(0,1),(0,2),(0,3),(1,2)),
{3}((0,0),(1,0),(2,0),(3,0),(1,-1)),
{4}((0,0),(1,0),(2,0),(3,0),(2,-1)),
{5}((0,0),(1,0),(2,0),(3,0),(1,1)),
{6}((0,0),(1,0),(2,0),(3,0),(2,1)),
{7}((0,0),(1,-1),(1,0),(1,1),(1,2)),
{8}((0,0),(1,-2),(1,-1),(1,0),(1,1))
),
//G
(
{1}((0,0),(0,1),(0,2),(1,0),(1,2)),
{2}((0,0),(0,1),(1,1),(2,1),(2,0)),
{3}((0,0),(0,1),(1,0),(2,0),(2,1)),
{4}((0,0),(1,0),(1,1),(1,2),(0,2)),
{5}((0,0),(0,0),(0,0),(0,0),(0,0)),
{6}((0,0),(0,0),(0,0),(0,0),(0,0)),
{7}((0,0),(0,0),(0,0),(0,0),(0,0)),
{8}((0,0),(0,0),(0,0),(0,0),(0,0))
),
//H
(
{1}((0,0),(1,0),(1,1),(0,1),(0,2)),
{2}((0,0),(0,1),(0,2),(1,2),(1,1)),
{3}((0,0),(1,0),(1,1),(0,1),(2,1)),
{4}((0,0),(1,0),(1,1),(0,1),(2,0)),
{5}((0,0),(1,0),(1,1),(0,1),(1,-1)),
{6}((0,0),(1,0),(1,1),(0,1),(1,2)),
{7}((0,0),(1,0),(2,0),(2,-1),(1,-1)),
{8}((0,0),(1,0),(2,0),(2,1),(1,1))
),
//I
(
{1}((0,0),(0,1),(0,2),(1,2),(1,3)),
{2}((0,0),(0,1),(0,2),(1,0),(1,-1)),
{3}((0,0),(0,1),(1,0),(1,-1),(1,-2)),
{4}((0,0),(0,1),(1,1),(1,2),(1,3)),
{5}((0,0),(1,0),(2,0),(2,1),(3,1)),
{6}((0,0),(1,0),(2,0),(2,-1),(3,-1)),
{7}((0,0),(1,0),(1,1),(2,1),(3,1)),
{8}((0,0),(1,0),(1,-1),(2,-1),(3,-1))
),
//J
(
{1}((0,0),(1,0),(1,-1),(1,1),(2,0)),
{2}((0,0),(0,0),(0,0),(0,0),(0,0)),
{3}((0,0),(0,0),(0,0),(0,0),(0,0)),
{4}((0,0),(0,0),(0,0),(0,0),(0,0)),
{5}((0,0),(0,0),(0,0),(0,0),(0,0)),
{6}((0,0),(0,0),(0,0),(0,0),(0,0)),
{7}((0,0),(0,0),(0,0),(0,0),(0,0)),
{8}((0,0),(0,0),(0,0),(0,0),(0,0))
),
//K
(
{1}((0,0),(1,0),(1,1),(2,1),(2,2)),
{2}((0,0),(1,0),(1,-1),(2,-1),(2,-2)),
{3}((0,0),(0,1),(1,0),(1,-1),(2,-1)),
{4}((0,0),(0,1),(1,1),(1,2),(2,2)),
{5}((0,0),(0,0),(0,0),(0,0),(0,0)),
{6}((0,0),(0,0),(0,0),(0,0),(0,0)),
{7}((0,0),(0,0),(0,0),(0,0),(0,0)),
{8}((0,0),(0,0),(0,0),(0,0),(0,0))
),
//L
(
{1}((0,0),(0,1),(0,2),(0,3),(1,0)),
{2}((0,0),(0,1),(0,2),(0,3),(1,3)),
{3}((0,0),(1,0),(2,0),(3,0),(0,1)),
{4}((0,0),(0,1),(1,1),(2,1),(3,1)),
{5}((0,0),(1,0),(2,0),(3,0),(3,-1)),
{6}((0,0),(1,0),(2,0),(3,0),(3,1)),
{7}((0,0),(1,0),(1,-1),(1,-2),(1,-3)),
{8}((0,0),(1,0),(1,1),(1,2),(1,3))
));
var
map:array [1..10,1..10] of char;
t:array ['A'..'L'] of boolean;
i,j,ntry:longint;
procedure print;
var
i,j:longint;
begin
for i:=1 to 10 do
begin
for j:=1 to i do write (map[i,j]);
writeln;
end;
close (input); close (output);
halt;
end;
procedure printno;
begin
writeln ('No solution');
close (input); close (output);
halt;
end;
procedure work(l,r:longint);
var
c:char;
i,j,x,y:longint;
flag:boolean;
begin
inc (ntry);
if ntry>trynum then printno;
if l>10 then print;
if r>l then begin work(l+1,1); exit; end;
if map[l,r]<>'.' then begin work(l,r+1); exit; end;
for c:='A' to 'L' do
if not t[c] then
for i:=1 to snum[c] do
begin
flag:=true;
for j:=1 to pnum[c] do
begin
x:=l+shape[c,i,j,1]; y:=r+shape[c,i,j,2];
if (x>10) or (y>x) or (y<0) or (map[x,y]<>'.') then begin flag:=false; break; end;
end;
if flag then
begin
t[c]:=true;
for j:=1 to pnum[c] do
begin
x:=l+shape[c,i,j,1];
y:=r+shape[c,i,j,2];
map[x,y]:=c;
end;
work(l,r+1);
t[c]:=false;
for j:=1 to pnum[c] do
begin
x:=l+shape[c,i,j,1];
y:=r+shape[c,i,j,2];
map[x,y]:='.';
end;
end;
end;
end;
begin
// assign (input,'zhzyx.in'); reset (input);
// assign (output,'zhzyx.out'); rewrite (output);
for i:=1 to 10 do
begin
for j:=1 to i do
begin
read (map[i,j]);
if map[i,j]<>'.' then t[map[i,j]]:=true;
end;
readln;
end;
work(1,1);
printno;
end.
转载于:https://www.cnblogs.com/SueMiller/archive/2011/07/28/2119890.html
解题报告 noi 2005 智慧珠游戏(BT 搜索)相关推荐
- NOI 2005 智慧珠游戏 zhzyx
使劲搜索,判了一下连通块(大小<3则剪枝,3 <= 大小 <= 5 则填入对应的棋子,无法填入则剪枝),另外搜索之前判一下棋盘上半.下半部分空格的数量关系,若上面的空格较多,则把棋盘 ...
- Luogu P4205 [NOI2005]智慧珠游戏
P4205 [NOI2005]智慧珠游戏 题意 题目描述 智慧珠游戏拼盘由一个三角形盘件和\(12\)个形态各异的零件组成.拼盘的盘 件如图\(1\)所示 对于由珠子构成的零件,可以放到盘件的任一位置 ...
- 【NOI2005】智慧珠游戏,DLX的NOIP坎关。
这道题会做了,NOIP就出什么DLX都不怕了,注意:是NOI"P". 题意:有12个块,可以任意翻转.旋转,即每个块最多有8种表现形式.现在要求你把它们填进图中. 注:每个块只能用 ...
- 五连珠matlab,智慧珠游戏拼盘终于有了自己比较满意的解法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 MasterGraph = VertexDelete[ Graph[EdgeList@ GridGraph@{10, 10}], _?(Subtract ...
- 解题报告:HDU_6169 Senior PanⅡ (记忆化搜索)
题目链接 题意: 给定一个区间 [ L , R ] ,询问区内所有最小因子(除去1)为K的数之和 1<=L,R<=1e11 , 2<=K<=1e11 官方题解: : 思路: 如 ...
- NOI 2005 题解
维修数列 (传送门) 题意 对于一个数列,支持插入,删除,修改,翻转,求和,求最大子列的操作 分析 又是对于一个数列的各种操作,考察splay的各种操作(NOI这几年真爱考splay),没什么好分析的 ...
- [LeetCode解题报告] LCP 49. 环形闯关游戏
[LeetCode解题报告] LCP 49. 环形闯关游戏 一. 题目 1. 题目描述 2. 原题链接 二. 解题报告 1. 思路分析 2. 复杂度分析 3. 代码实现 三. 本题小结 四. 参考链接 ...
- 格子游戏 解题报告
格子游戏 解题报告 v [问题描述] v Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边: v v v v ...
- 解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
最新文章
- ftp上传当天文件的方法_五种方法将文件上传到FTP服务器
- 专访 Swin Transformer 作者胡瀚:面向计算机视觉中的「开放问题」 原创
- Ubuntu21.04 deepin-wine 微信输入中文乱码,黑块,和多余窗口问题解决
- SQLServer创建数据库详解
- mysql 冗余外键 同步_由于外键约束导致mysql同步出问题的故障
- yocto生成各种格式的文件系统
- 剑与远征服务器维修,剑与远征怎么换区 剑与远征在哪里切换新的服务器
- 删除文件批处理delete file.bat
- 数组实现-线性表/链表/串/栈的操作
- hdu 4475 Downward paths (找规律)
- 人类已经无法阻止苹果了——吐槽PC厂商
- javascript根据单元格内容动态合并相同内容单元格
- Linux与Windows的区别与比较,及Linux基本命令
- 哇哦,它让美味随心所“鲜”
- adb ps shell 查看进程_adb中ps命令的详解
- window cmd 创建文本文件
- FXS与FXO接口的区别及应用
- [渝粤教育] 西南交通大学 大学生的智慧篮球 参考 资料
- 新希望美好辣子蜀黍小火锅招商
- 微信企业号之获取所有部门列表
热门文章
- 关于数据分析部门组织架构的探讨
- python3字典详解_Python3实现的字典遍历操作详解
- linux串口输出重定向到文件,DOS 下将屏幕打印输出重定向到指定文件中(或重定向到并口/串口)...
- 并行算法设计与性能优化总结
- 产品 电信nb接口调用_通用电信华为物联网IOT开放平台NB-IOT对接profile透传编解码插件离线定制开发...
- 局域网访问虚拟机服务器桥接,虚拟机让局域网访问的方法---桥接模式
- android手机测试用例,Android手机测试用例-从事手机测试必备
- GeoHash入门及应用
- 移动用户界面的5个设计原则
- 关于SpringMVC中model的attribute无法指定别名的解决方案