rank | solved | A | B | C | D | E | F | G | H | I | J | K |
---|---|---|---|---|---|---|---|---|---|---|---|---|
4/52 | 5/11 | . | O | O | . | Ø | O | . | . | . | O | . |
B 吃豆豆
Solved(?) by Grunt.
假算法。
Div2版本:$dp[i][j][t]$ 表示 $t$ 秒时,到 $(i,j)$ 获得的最多糖果数,答案遍历一下终点位置处的 dp 值即可。
C 拆拆拆数
Solved by Grunt and wb.
拆出前几个素数即可。
E 流流流动
Upsolved by XLor.
角谷猜想。除 $1$ 外所有数字 $x$,奇数和 $3x+1$ 连边,偶数和 $x \over 2$ 连边。你需要从 $1,2,\dots,n$ 中选出一些数字,选数字 $i$ 获得价值 $f[i]$ ,选了数字 $i$ 和 $j$ 之间有连边,失去价值 $d[min(i,j)]$,要求最大化价值。
注意到如果 $1$ 没有和 $4$ 连边的话,这个图是没有环的,因为如果有环,那么存在环上的数字 $x$ 不会通过变换回到 $1$,与角谷猜想矛盾(在所给数据范围内,角谷猜想被验证正确)。
因此这个图实际上是一个森林,简单树形 $dp$ 即可。
F 爬爬爬山
Solved by Grunt.
一个人一开始有能量 $k$,上下山时,海拔上升一米,能量下降一点,海拔下降一米能量,能量上升一点,一开始可以选择将一些山的高度砍掉,砍掉 $l$ 米消耗 $l^2$ 的花费。山与山之间有无向边,询问一个从 $1$ 到 $n$ 的最短路。
能量实际上就类似于势能,经过高度大于 $k + h_1$ 的山要砍掉高度,Dijkstra 即可。
J 夺宝奇兵
Solved by Grunt and XLor.
$n$ 个人 $m$ 个物品,每个物品属于一个人,每个物品有一个价格,你现在要从这些人中买物品,使得你的物品数严格大于任意一个人,问最小花费。
首先,这个购买个数和花费的不单调,反例:一个人有 $3$ 个价值巨大的物品,剩下十个人每个人一个价值为 $1$ 的物品,所以你要买 $4$ 个物品,花费为 $4$。
因此,枚举购买的件数,计算当前件数的花费。
将所有人的物品价格降序排序,$x$ 轴为每个人,$y$ 轴为每个人的每个物品,我们购买 $k$ 件,实际上是用一条横线把上面一块的所有物品全部切掉。
将所有物品按照在对应人中的序号和权值两个关键字一起排序,后缀和实际上就是被切掉的物品的权值和。
如果切掉的物品件数少于当前枚举的购买件数,还是要把其剩余的前缀中选择最小的买掉。这个用主席树(权值线段树),离散化后维护每段的个数和权值和。
复杂度:$O(n\log^2n)$
PS:根本不需要主席树来可持久化,每次询问都是前缀和,枚举的时候插入一下即可。
代码
E
1 |
|
J
1 |
|