zoukankan      html  css  js  c++  java
  • 取石子游戏简化版

    题目大意:

    给定(n)个双端队列,每次只能在两端取,求先手与后手的最大的取值和。

    ((sum len leq 1000000))

    思路:

    这是HNOI2000年一题的简化版,实质不变。

    废话不多说,直接讲思路。

    ((n leq 1000000))应该可以一眼看出是贪心吧。贪心就肯定是先手选最大的值,但显然不符合这题。

    先玩一下小样例,若有三个数 (a_1, a_2, a_3),若 (a_1)(a_3) 最大的话,那么满足先手优先选大的值。若(a_2)最大的话,那么后手肯定选了(a_2),且先手肯定选了(a_1,a_3)。对于这种情况,无论怎么选,先手与后手的差值不变,恒为(a_1+a_3-a_2)

    所以直接把这三个数合并就好了,因为知道他们的差值与所有的数的和,就可以知道两者的值。

    那么合并完后,显然每个队列都是V字形,或单调递增,或单调递减。

    下面,证明一下先选大的是正确的。(虽然很显然)

    设最大值为(X),若先手选了一个严格小于(X)(Y),此时后手去选(X)留给先手的局面是不变的,所以不选最大值肯定错。

    基于必选最大值,数值大的一定比数值小的能先选,形象一点,你为什么把最大值留给别人,还去刨了一个较小的出来。

    所以处理完后直接sort就好了。

    (代码就鸽了)

    总结:

    对于贪心神题,要大胆猜想,玩小样例找一般规律,合并是贪心中的比较常见的操作。

    PS:(这篇原题题解本来下午就打好了,结果被fcz删了。。。)

  • 相关阅读:
    洛谷P1084 [NOIP2012提高组Day2T3]疫情控制
    洛谷P1083 [NOIP2012提高组Day2T2]借教室
    洛谷P2736 “破锣摇滚”乐队 Raucous Rockers
    POJ1692 Crossed Matchings
    洛谷P1315 [NOIP2011提高组Day2T3] 观光公交
    阅读了几个别人写的轮播源码
    js遍历函数
    解决IE6的PNG透明
    04-树5 Root of AVL Tree
    平衡树实现
  • 原文地址:https://www.cnblogs.com/ZPAYAUR/p/11348808.html
Copyright © 2011-2022 走看看