智慧珠游戏

【问题描述】

智慧珠游戏拼盘由一个三角形盘件和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 搜索)相关推荐

  1. NOI 2005 智慧珠游戏 zhzyx

    使劲搜索,判了一下连通块(大小<3则剪枝,3 <= 大小 <= 5 则填入对应的棋子,无法填入则剪枝),另外搜索之前判一下棋盘上半.下半部分空格的数量关系,若上面的空格较多,则把棋盘 ...

  2. Luogu P4205 [NOI2005]智慧珠游戏

    P4205 [NOI2005]智慧珠游戏 题意 题目描述 智慧珠游戏拼盘由一个三角形盘件和\(12\)个形态各异的零件组成.拼盘的盘 件如图\(1\)所示 对于由珠子构成的零件,可以放到盘件的任一位置 ...

  3. 【NOI2005】智慧珠游戏,DLX的NOIP坎关。

    这道题会做了,NOIP就出什么DLX都不怕了,注意:是NOI"P". 题意:有12个块,可以任意翻转.旋转,即每个块最多有8种表现形式.现在要求你把它们填进图中. 注:每个块只能用 ...

  4. 五连珠matlab,智慧珠游戏拼盘终于有了自己比较满意的解法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 MasterGraph = VertexDelete[ Graph[EdgeList@ GridGraph@{10, 10}], _?(Subtract ...

  5. 解题报告:HDU_6169 Senior PanⅡ (记忆化搜索)

    题目链接 题意: 给定一个区间 [ L , R ] ,询问区内所有最小因子(除去1)为K的数之和 1<=L,R<=1e11 , 2<=K<=1e11 官方题解: : 思路: 如 ...

  6. NOI 2005 题解

    维修数列 (传送门) 题意 对于一个数列,支持插入,删除,修改,翻转,求和,求最大子列的操作 分析 又是对于一个数列的各种操作,考察splay的各种操作(NOI这几年真爱考splay),没什么好分析的 ...

  7. [LeetCode解题报告] LCP 49. 环形闯关游戏

    [LeetCode解题报告] LCP 49. 环形闯关游戏 一. 题目 1. 题目描述 2. 原题链接 二. 解题报告 1. 思路分析 2. 复杂度分析 3. 代码实现 三. 本题小结 四. 参考链接 ...

  8. 格子游戏 解题报告

    格子游戏  解题报告 v [问题描述] v Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边: v v v v     ...

  9. 解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

最新文章

  1. ftp上传当天文件的方法_五种方法将文件上传到FTP服务器
  2. 专访 Swin Transformer 作者胡瀚:面向计算机视觉中的「开放问题」 原创
  3. Ubuntu21.04 deepin-wine 微信输入中文乱码,黑块,和多余窗口问题解决
  4. SQLServer创建数据库详解
  5. mysql 冗余外键 同步_由于外键约束导致mysql同步出问题的故障
  6. yocto生成各种格式的文件系统
  7. 剑与远征服务器维修,剑与远征怎么换区 剑与远征在哪里切换新的服务器
  8. 删除文件批处理delete file.bat
  9. 数组实现-线性表/链表/串/栈的操作
  10. hdu 4475 Downward paths (找规律)
  11. 人类已经无法阻止苹果了——吐槽PC厂商
  12. javascript根据单元格内容动态合并相同内容单元格
  13. Linux与Windows的区别与比较,及Linux基本命令
  14. 哇哦,它让美味随心所“鲜”
  15. adb ps shell 查看进程_adb中ps命令的详解
  16. window cmd 创建文本文件
  17. FXS与FXO接口的区别及应用
  18. [渝粤教育] 西南交通大学 大学生的智慧篮球 参考 资料
  19. 新希望美好辣子蜀黍小火锅招商
  20. 微信企业号之获取所有部门列表

热门文章

  1. 关于数据分析部门组织架构的探讨
  2. python3字典详解_Python3实现的字典遍历操作详解
  3. linux串口输出重定向到文件,DOS 下将屏幕打印输出重定向到指定文件中(或重定向到并口/串口)...
  4. 并行算法设计与性能优化总结
  5. 产品 电信nb接口调用_通用电信华为物联网IOT开放平台NB-IOT对接profile透传编解码插件离线定制开发...
  6. 局域网访问虚拟机服务器桥接,虚拟机让局域网访问的方法---桥接模式
  7. android手机测试用例,Android手机测试用例-从事手机测试必备
  8. GeoHash入门及应用
  9. 移动用户界面的5个设计原则
  10. 关于SpringMVC中model的attribute无法指定别名的解决方案