zoukankan      html  css  js  c++  java
  • Codeforces Round #670 (Div. 2)/Codeforces1406 ABCD

    AC代码

    A. Subset Mex

    就先将集合中的数尽可能地用于增加(mex(A)),然后再尽可能地增加(mex(B))

    B. Maximum Product

    先排个序,然后由于有可能负负得正,所以答案要么用最大的5个数,要么用最小的2个数和最大的3个数,要么用最小的4个数和最大的一个数。分别算然后取最大值即可。

    先DFS找到树的所有重心。如果重心唯一,随便找条幸运的边删了再加就完事了。

    否则,就有两个重心,记为(c_1)(c_2)。用反正法可以推出(c_1)(c_2)之间必定有一条边。然后从(c_2)的邻接表中随便选择一个非(c_1)的节点(p),可以证明这个节点必定存在。将边((c_2,p))删除并加入边((c_1,p))之后,(c_1)就会是唯一的重心。

    D. Three Sequences

    如果(a_i > a_{i-1}),那么(b_i = b_{i-1} + a_i - a_{i-1})

    如果(a_i < a_{i-1}),那么(c_i = c_{i-1} + a_i - a_{i-1})

    (sum = sum_{i=2}^nmax(0, a_i-a_{i-1})),那么(b_n = b_1 + sum = a_1- c_1+ sum)

    易得(c_1 = max{c_i}, b_n = max{b_i}),所以现在就只需要最小化(max(c_1, b_n)),即最小化(max(c1, a_1 - c_1 + sum)),而这个值可以推出就是(lceil frac{a_1+sum}{2} ceil)

    最后是区间加的问题,通过上面的分析,其实最重要的就是维护(a)的差分,然后原数组上的区间加对应到差分上就是两个端点的修改。

    总结

    30min过完前三题,看了下排名再70左右。然后卡D,推了个能过sample1的假结论,然后写了半天sample2过不去,人傻了。赛后看了jiangly的代码幡然醒悟。

  • 相关阅读:
    POJ-2096-Collecting Bugs(概率DP)
    2019ICPC南京网络赛总结
    LOJ-6285-数列分块入门9
    LOJ-6284-数列分块入门8
    LOJ-6283-数列分块7
    bzoj2049: [Sdoi2008]Cave 洞穴勘测
    bzoj1010: [HNOI2008]玩具装箱toy
    bzoj1597: [Usaco2008 Mar]土地购买
    bzoj1233: [Usaco2009Open]干草堆tower 单调队列优化dp
    bzoj2442&&codevs4654 单调队列优化dp
  • 原文地址:https://www.cnblogs.com/zengzk/p/13661044.html
Copyright © 2011-2022 走看看