【Codeforces #228】Solutions

  http://codeforces.com/contest/389

  重新把号刷到Div 1 准备ACM?(我这么菜还是玩玩算了……) 

  官方题解出的很快

  

  Div2 A: 怎么做都行……随便找俩数减就可以

  Div2 B: 找上面那个'#',然后更新五个,最后检查有没有多余的'#'

  Div2 C & Div1 A: 贪心即可。当然题解方法说的第i小的strength[i]>i/piles也对的。

  Div2 D & Div1 B: 二进制划分。

  类似这种,除去1和2之外被分成3层(层数取决于二进制位数)。设f[i]为到第i层时的方案数,那么如果红色路径存在则f[i]++。

  Div2 E & Div1 C: 艾玛无望时想到了做法。。

    1.首先对于某一堆,如果我(先手那个)想拿上面的一半,那我一定可以全部拿到。(奇数堆不包括中间那一个)

    这是显而易见的,因为先手总可以保证在当前堆“快人一步”。但同时后手也可以保住这一堆的后半堆(如果他想)。

    2.在先手当前所有决策中,因为对于每一堆的下半部分处于被动状态,所以如果下半堆价值很高,那后手可以通过优势阻止先手去拿。所以不可能出现一个人拿了超过一堆的一半。

    3.这样上下半堆就分属于两个人了,中间那个怎么办?因为先手优势,先手可以“占据”某一堆的中间牌。

    比如牌编号是ABC,A想要B的话,只需要把A拿走,那C就一定是自己的了。

    但是每次抢中间牌的条件是拥有先手优势,当A抢了一张中间牌之后,A就没有先手优势了,所以这种抢中间牌的操作是交替的。

    就完了。。

 

  div1 DE还没看,不过看起来不像是我会做的样子……

 

posted @ 2014-02-04 11:34  Delostik  阅读(319)  评论(0编辑  收藏  举报