POJ 3210 Coins (很好的想法题)

来源:互联网 发布:站长吧源码论坛 编辑:程序博客网 时间:2024/05/16 12:57

http://poj.org/problem?id=3210


这是一道很好的思考题。

关键信息:所求的x是对于任意一种初始情况,使所有硬币正面或反面朝上的最少翻转此数,并且注意“only one coin could be flipped each time”,即每次只能翻转一枚硬币
所以:
1. 答案要具有普适性,除了n为1时x=0,当n>1时x必为正,但是对于硬币全部朝上的情况也要翻转x次,由此可以得出:必须翻转偶数次
2. 若n为偶数,考虑正面和反面都为奇数个硬币的情况,此时翻转次数必为奇数,矛盾,故此时No Solution;
3. 若n为奇数,则正面和反面的硬币数必为一奇一偶,那就不会出现“必须”翻转奇数次的情况(翻转偶数的硬币即可),所以x可能存在。
那我们来看看x的上界是多少:x不会大于n,反之,那对于任何情况至少会有一个硬币翻转了2次,不符合“最少”的要求,所以x<=n,但是n是奇数,x又必须为偶数,所以x<=n-1
那x的下界呢?来看看只有一个硬币朝上其余硬币都朝下的情况:若翻转那个朝上的硬币,则翻转次数必为2k+1,矛盾,所以我们应翻转其余n-1个朝下的硬币,这样x>=n-1
由这两个不等式可以得出当n为奇数时x必然存在,并且x=n-1


(代码就不贴了)


当然你觉得这题不过瘾的话还可以看看这道差不多(思考多,代码短)的题:POJ 2484 A Funny Game

1 0
原创粉丝点击