JZOJ1250.【USACO题库】1.4.2 The Clocks

题目描述

考虑将如此安排在一个 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

[但这可能不是正确的方法,请看下面]

PROGRAM NAME: clocks

INPUT FORMAT

第1-3行: 三个空格分开的数字,每个数字表示一个时钟的初始时间,3,6,9,12。

数字的含意和上面第一个例子一样。

SAMPLE INPUT (file clocks.in)

9 9 12

6 6 6

6 3 6

OUTPUT FORMAT

单独的一行包括一个用空格分开的将所有指针指向12:00的最短移动顺序的列表。

如果有多种方案,输出那种使的连接起来数字最小的方案。(举例来说5 2 4 6 < 9 3 1 1)。

SAMPLE OUTPUT (file clocks.out)

4 5 8 9

输入

输出

样例输入

样例输出

数据范围限制

网上说这是IOI真题,哇哦
的确这题很经典
不过先说,宽搜A不了这题
调试一整晚的我一怒之下弃坑去码暴力

思路:
明显地,每个操作最多转三下:0下,1下,2下,3下,转四下就转回来了,没用
那么我们直接暴力9个循环(啧),4^9=262144,时间上过的去

wait暴力?好像有点问题
(好吧)一点问题也没有
你的操作一定是升序的,这个不用我再说了吧?
你怎么调换转的顺序,结果出来都一样,按照题目就输出升序的(最小的)

还有一个好搞的地方就是,每个东东div 3会好弄一点、好看一点

还有一个优化是最重要的(不搞这优化A不了你信吗)

直接改变超时无疑,so就得在最里面一层循环中优化
方法是在里面再用俩循环来剔掉没用方案
第一层循环是每一个钟的状态
第二层循环是枚举方案的每一种

如果方案操作后当前这个钟不指向12
这种方案就不行了
后面几个钟就不用再操作了
哦对了,这种方法找到的第一种一定最小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值