zoukankan      html  css  js  c++  java
  • 【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还没看,不过看起来不像是我会做的样子……

  • 相关阅读:
    过滤非GBK字符
    打印整数数字
    std::string 方法列表
    设计模式——单例模式(Singleton )
    编程之美二进制一的个数
    Jsoncpp试用指南
    GCC下宏扩展后的++i
    关于字节对齐的sizeof的讨论
    Notepad++ 更改和定制主题
    求子数组的最大和
  • 原文地址:https://www.cnblogs.com/Delostik/p/3537796.html
Copyright © 2011-2022 走看看