SSOJ1083时钟[USACO]
2875+
作者:crxis 发布:2018-09-25 分类:深度优先搜索
题目大意:有9个钟和9种拨钟方案,每个钟被拨动一次会顺时针旋转90度,最少操作几次全部钟都指向12点?
题目描述
考虑将如此安排在一个 3 x3 行列中的九个时钟:
|-------| |-------| |-------| | | | | | | | |---O | |---O | | O | | | | | | | |-------| |-------| |-------| A B C
|-------| |-------| |-------| | | | | | | | O | | O | | O | | | | | | | | | | |-------| |-------| |-------| D E F
|-------| |-------| |-------| | | | | | | | O | | O---| | O | | | | | | | | | |-------| |-------| |-------| G H I
目标要找一个最小的移动顺序将所有的指针指向12点。下面原表格列出了9种不同的旋转指针的方法,每一种方法都叫一次移动。选择1到9号移动方法,将会使在表格中对应的时钟的指针顺时针旋转90度。
移动方法 受影响的时钟 1 ABDE 2 ABC 3 BCEF 4 ADG 5 BDEFH 6 CFI 7 DEGH 8 GHI 9 EFHI
Example
9 9 12 9 12 12 9 12 12 12 12 12 12 12 12 6 6 6 5 -> 9 9 9 8-> 9 9 9 4 -> 12 9 9 9 -> 12 12 12 6 3 6 6 6 6 9 9 9 12 9 9 12 12 12 [但这可能不是正确的方法,请看下面]
输入
第1-3行: 三个空格分开的数字,每个数字表示一个时钟的初始时间,3,6,9,12。数字的含意和上面第一个例子一样。
输出
单独的一行包括一个用空格分开的将所有指针指向12:00的最短移动顺序的列表。
如果有多种方案,输出那种使其连接起来数字最小的方案。(举例来说5 2 4 6 < 9 3 1 1)。
样例输入
9 9 12
6 6 6
6 3 6
样例输出
4 5 8 9
解题思路
暴力枚举每种方法使用次数,题目要求输出次数最少且字典需最小,那么枚举时方法编号从小到大枚举,使用次数从大到小枚举,这样可以使得小号在前面出现次数多一些。
枚举完毕后,验证是否能使得所有钟指向12点:对于每种方法,将跟他有关的中全部顺时针旋转90度(+3),最后判断是否全部都是12的倍数,如果是记录最小值和具体操作方法。
(写9重循环实在太累,还不如写搜索!)