翻译
查看原帖
翻译
161223
东方澂楼主2022/1/18 15:48

注:该翻译来自《C++,挑战编程——程序设计竞赛进阶训练指南》

题目描述
给定宽度为 22,高度为 11 的若干枚多米诺骨牌,每枚多米诺骨牌牌面上有两个数字。将两枚多米诺骨牌固定放置在一行的两端,在中间留下 nn 块宽度为2的空白,再给定 mm 枚多米诺骨牌,请问是否可从 mm 枚骨牌中选出某些骨牌填满这 nn 块空白,并且使得相邻骨牌连接处的数字相同。例如,给定初始骨牌 (0,1)(0, 1)(3,4)(3, 4),中间留有 33 块宽度为 22 的空白,44 枚候选骨牌为 (2,1)(2, 1)(5,2)(5, 2)(2,2)(2, 2)(3,2)(3, 2),则可以按如下方式进行填充:(0,1)(1,2)(2,2)(2,3)(3,4)(0, 1)(1, 2)(2, 2)(2, 3)(3, 4)

输入格式
本题有多组数据
每组测试数据的第一行为整数 nn,表示空白的块数,接着一行是整数 mm,表示候选骨牌的数量,nm14n \leq m \leq 14。接着两行表示两端的固定骨牌,每行包含两个整数,数字出现的顺序为固定骨牌上的数字,顺序为从左至右。接着是 mm 行,也是每行包含两个整数,表示候选骨牌上的数字。当 nn00 时,输入结束。

输出格式
对于输入中的每组数据,如果存在满足要求的放置方案,输出 YES,否则输出 NO

**题目描述**  
给定宽度为 $2$,高度为 $1$ 的若干枚多米诺骨牌,每枚多米诺骨牌牌面上有两个数字。将两枚多米诺骨牌固定放置在一行的两端,在中间留下 $n$ 块宽度为2的空白,再给定 $m$ 枚多米诺骨牌,请问是否可从 $m$ 枚骨牌中选出某些骨牌填满这 $n$ 块空白,并且使得相邻骨牌连接处的数字相同。例如,给定初始骨牌 $(0, 1)$ 和 $(3, 4)$,中间留有 $3$ 块宽度为 $2$ 的空白,$4$ 枚候选骨牌为 $(2, 1)$,$(5, 2)$,$(2, 2)$,$(3, 2)$,则可以按如下方式进行填充:$(0, 1)(1, 2)(2, 2)(2, 3)(3, 4)$。

**输入格式**  
**本题有多组数据**。  
每组测试数据的第一行为整数 $n$,表示空白的块数,接着一行是整数 $m$,表示候选骨牌的数量,$n \leq m \leq 14$。接着两行表示两端的固定骨牌,每行包含两个整数,数字出现的顺序为固定骨牌上的数字,顺序为从左至右。接着是 $m$ 行,也是每行包含两个整数,表示候选骨牌上的数字。当 $n$ 为 $0$ 时,输入结束。

**输出格式**  
对于输入中的每组数据,如果存在满足要求的放置方案,输出 `YES`,否则输出 `NO`。
2022/1/18 15:48
加载中...