zoukankan      html  css  js  c++  java
  • JAG Practice Contest for ACM-ICPC Asia Regional 2016

    2016弱校联盟十一专场10.3

    传送门

    B. Help the Princess!

    • 计算皇后和士兵谁先到达出口即可。

    C. We don't wanna work!

    • 两个优先队列维护工作中积极性最小的,空闲中积极性最高的。
    • 两个队列倒来倒去就可以了。

    D. Parentheses

    • 考虑最坏情况)))...(((。
    • 假设有(x)个右括号,那么这种情况需要(frac{x(x+1)}{2})次操作。
    • 将第一个左括号移动每往左移动一个位置,则需要的操作次数减一,直到移动到最左边则变成(x-1)的子问题。
    • 那么只要找到第一个(x)使得方案数大于等于(n)即可,根据差值移动第一个左括号。

    E. Similarity of Subtrees

    • hash

    F. Escape from the Hell

    • 除了最后一瓶饮料外,其余时候必然是喝(A_i-B_i)大的饮料喝。
    • 首先按照(A_i-B_i)从大到小排序,假设喝到第(i)瓶,当前爬的高度为(H),罪犯的高度为(C),显然(H gt C),否则直接结束了。
    • 在当前情况下,可以喝(i+1cdots n)(A_j)最大的尝试一步跳上去,否则需要调整(1cdots i)(A_j)较大的一瓶放到当前喝,但是需要保证总体下降高度不会被罪犯抓到。
    • 假设我们把(j)移动到最后,那么需要满足$$d_1+cdots + d_{j-1} + d_{j + 1} +cdots + d_k - c_1-c_2-cdots - c_{k-1} gt 0$$(any kin[j+1,i],d_i=A_i-B_i)
    • 整理下式子可得$$d_1+cdots + d_k - c_1-cdots - c_{k-1} gt d_j$$
    • 可以发现左边式子与(j)没有关系,所以对于任意的(j)来说,如果均满足式子说明位置(j)是可以往后移动的。
    • 假设我们已经得到了在(i-1)的可移动位置,对于左边的式子新增了$$d_1+cdots + d_i - c_1-cdots - c_{i-1}$$也就是说我们只要把之前的可移动位置的(d)值与当前值比较即可,比较的顺序的肯定是从小到大,所以需要一个优先队列,然后用个线段树维护下最大(A)值(当然可以不用线段树,只是线段树的时间复杂度也够就随意写了)。

    G. Share the Ruins Preservation

    • 显然凸包会发生的变化的时候是在划分线在两个(x)坐标之间。
    • 那么我们将划分线按照顺序扫过去,然后维护凸包。
    • 但是,如果同时维护两个凸包显然很难,而维护一个凸包,就简单得多。
    • 正向扫一遍,维护一个凸包的面积,反向再扫一遍,维护另一个凸包的面积,最后枚举下划分线的位置然后计算面积和即可。
    • 维护凸包的做法,维护上凸壳和下凸壳及其面积。
  • 相关阅读:
    python中map()函数
    Numpy学习—np.random.randn()、np.random.rand()和np.random.randint()
    列表、集合和字典推导式
    pandas iloc函数
    python -- 类中self到底有什么用?再续
    python apply()函数
    python 中关于self到底有什么用续
    python——类中的self到底有什么作用
    类初始化的参数可以是任何形式
    python高级(元类、自定义元类)
  • 原文地址:https://www.cnblogs.com/mcginn/p/5948541.html
Copyright © 2011-2022 走看看