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还没看,不过看起来不像是我会做的样子……

  • 相关阅读:
    轻松学习之Linux教程二 一览纵山小:Linux操作系统具体解释
    SpringMVC经典系列-15对SpringMVC的总结---【LinusZhu】
    Testng 的数据源 驱动測试 代码与配置
    怎样统计分析CSDN博客流量
    python小知识点
    Javascript 笔记与总结(2-10)删除节点,创建节点
    C#6.0语言规范(十四) 枚举
    C#6.0语言规范(十三) 接口
    C#6.0语言规范(十二) 数组
    C#6.0语言规范(十一) 结构
  • 原文地址:https://www.cnblogs.com/Delostik/p/3537796.html
Copyright © 2011-2022 走看看