2.15

The Rock Game

题目大意:

有N (1 <= N <= 15)位二进制数,一开始是N个0, 你每次对当前状态进行一次操作,把当前状态的某个位置取反(即原来是0的变成1,原来是1的变成0)。 但是产生的新状态必须是之前从来没产生的。你的任务是:从N个0的状态出发,把2^N个状态都访问一次,最后重新能回到N0的状态。 请你把这个转换过程输出来,如果有多种方案成立,任意输出一种。

这是三位数的样例输出:

OOO

OXO

OXX

OOX

XOX

XXX

XXO

XOO

OOO

删去最后一行,就是2^N个状态,我们发现这个图像会基于中间这条线对称

我们会想到如何构造这样一个图形。把第二行和第三行对调,就变成红色字体的图形。容易发现,最后一竖列是根据01对称一次变成10,再如此对称。而第二行0011,对称为1100。第三行又翻一倍,00001111。实际上就是格雷码。

所以可以用双重循环实现,但就要用到二维数组,其实还可以用位运算进一步节省空间。用a[i]或1<<X来把1放在第(x+1)位。

 

 

附:位运算运算符

运算符  含义

    &  按位与

    |   按位或

     ^   按位异或

  ~   取反

<<   左移

>>   右移

Test Taking

题目大意:

有N (1 <= N <= 1,000,000)个 true 或者false的问题。

其中答案是true的问题的个数有K种可能:t_1, t_2, t_3,..., t_K (0 <=t_i<= N; 0 <= K <= 10,000). 但是我们无法知道具体哪个问题的答案是true或false。

现在Bessie要回答这N个问题,为了在运气最差的情况下答对的题目最多,她必须采取最优策略。

如:有6个问题,N=6, k = 2, t_1 = 0, t_2 = 3. 也就是说,这6个问题中,真命题的个数可能是0个,也可能是3个。那么Bessie为了在运气最差的情况答对的问题最多,她可以回答每个问题都是的答案都是false. 可以看出,如果她运气好的话,她能答对6题,但如果运气差的话(即有3到是true的问题),那么她只能答对3题(因为她的回答是6个false)。

因此,Bessie在最差的情况下能答对3题。这就是最优策略。

分析:二分答案:针对每一个可能,都要分别验证,看每个答案是否满足每个可能,但我们发现二分答案的验证实际上就有三种情况:

全选false,则采取true最多的可能

全选true,则采取true最少的可能

找出相邻差最大的两个可能,取其差的中间值

证明:排序,t_i设t_x 和 t_y是相邻的两个t_i(t_x>t_y),可以保证(t_x-t_y)/2个正确答案,他只需选择N-[(t_x+t_y)/2]个正确答案,其余全部选择false

Need For Speed

题目大意:

赛车质量是M (1 <= M <= 1,000) ,马力是F (1 <= F <= 1,000,000). 为了提升赛车性能,他可以到加工店添加一些零件。加工店有N(1 <= N <= 10,000)种零件,编号1..N, 每种零件只有一件。牛顿第二定理F =MA,( F 是力, M是质量, A 是加速度). 如果让他的车的加速度最大(如果有多种方案,让赛车的质量最小),应该配置哪些零件?

分析:

首先我们可以把每个加速度排序,然后加上去加速度越大的零件,提升也就越大,所以从大往小加,发现加了一个会使加速度变慢,就跳出循环。

陷阱:如果有多种方案,让赛车的质量最小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值