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)坐标之间。
- 那么我们将划分线按照顺序扫过去,然后维护凸包。
- 但是,如果同时维护两个凸包显然很难,而维护一个凸包,就简单得多。
- 正向扫一遍,维护一个凸包的面积,反向再扫一遍,维护另一个凸包的面积,最后枚举下划分线的位置然后计算面积和即可。
- 维护凸包的做法,维护上凸壳和下凸壳及其面积。