A.Erasing Vertices
- 想到了单独考虑一个点的贡献,可惜算的方法有问题,最后没有搞出来
- 对于一个点,考虑能够到达它的点的个数是 c n t cnt cnt,那么这个点被删去的概率为 1 c n t + 1 \frac{1}{cnt+1} cnt+11,因为这些点都是等概率的,答案就是 ∑ 1 c n t + 1 \sum \frac{1}{cnt+1} ∑cnt+11
B.Flip Digits
- 操作等价于将一个1向左边移动,如果左边是1则相消。
- 直接每一个位置判断一下,如果不同找到右边的第一个1来修改即可
C.Robots
- 考虑将一个机器人的预计路径当做区间 [ a i − b i , a i ] [a_i-b_i,a_i] [ai−bi,ai],那么有两种区间,包含或不包含0。对于一个包含0的区间,右端点如果被一个不包含0的区间覆盖,那么这个机器人就可以花费一的代价,将后面一个位置的机器人安排到自己的位置把自己吃掉。
- 分析一下可以发现,找到从右往左第一个没有被吃掉的机器人(区间包含0),它会把前面的机器人全部吃掉,然后有 b i − a i + 1 b_i-a_i+1 bi−ai+1的贡献,然后后面的机器人都只用花费1的代价。
- 假设后面有 c n t cnt cnt个不能被不包含0机器人吃掉的机器人,答案就是 m i n i { m a x ( b i − a i + 1 , c n t ) } min_i\{ max(b_i-a_i+1,cnt)\} mini{max(bi−ai+1,cnt)}
D.Convex Sequence
- 很容易想到差分两次,然后在差分两次的数组上DP。
- 相当于是枚举长度为 i i i时开头的增量的增量 d d d,对于总和的贡献为 d ∗ ( i + 1 ) ∗ i / 2 d*(i+1)*i/2 d∗(i+1)∗i/2,由于 ( i + 1 ) ∗ i / 2 ≤ m (i+1)*i/2\le m (i+1)∗i/2≤m的有 O ( m ) O(\sqrt m) O(m)个,因此暴力完全背包转移是 O ( m m ) O(m\sqrt m) O(mm)的。
- 再考虑可能有的时候增量时候负的,因此我们可以把这个凸函数分成向左向右两个递增的部分。左边和右边合并的时候要满足 l e n 1 + l e n 2 ≤ n , s 1 + s 2 + k n = m len1+len2\le n,s1+s2+kn=m len1+len2≤n,s1+s2+kn=m
- 只需要按照 % n \%n %n分类用一个桶维护右边的个数,枚举左边的 l e n 1 , s 1 len1,s1 len1,s1即可。在 l e n 1 len1 len1增大的时候将桶里的一些元素去除。