2019 Multi-University Training Contest 9
A. Rikka with Quicksort
题意 求 EX 快速排序复杂度。
做法 根据线性期望可加性,独立考虑长度为 \(m\) 的区段对答案的贡献。进行简单的公式推导,对 \(s(x)=\sum_{i=1}^{x}\frac{1}{i}\) 进行分块打表即可。
复盘
- 问题可转化为按照某个排列依次删除元素,没删一个元素时,得分为所在连通块 size - 1【🐶】.
- 先发现 \(m=1\) 的 Case 很可做,令 pair \((x,y)\) 表示,删除 \(x\) 时,\(y\) 与 \(x\) 同在一个连通块。那么这样的 pair 出现的概率为 \(\frac{1}{|pos_x-pos_y+1|}\)。
- 按长度统计答案即可。
- 然后 \(m \neq 1\),就不会做了,视野狭窄,比赛的时候一直想调整一下 \(m=1\) 的做法,考虑一个位置有序对对答案的贡献,但很遗憾,当距离小于 \(m\) 时,问题变得十分的复杂,甚至把问题转化成了涉及到最小值期望这样的问题。
- 记住了啊!:期望求加法很简单,求极值很不简单
- 所以该怎样想到舒适的解决问题的方法呢?
- 利用到期望线性可加性的问题,最重要的事情,把答案分解成哪些东西之和。
- 比如说这个问题,注意到【🐶】这句话,我们应该想想,能不能把答案分解成,区间 \([l,r]\) 做为那个连通块对答案贡献呢?
- 于是就可以按照区间长度进行分类,问题就很好解决了。
B. Rikka with Cake
题意 矩形内有很多条射线,统计区域个数。
idea
- 欧拉定理,统计点数边数即可。
- 具体实现有请 F0_0H
具体实现
- 上下左右做四次
- 区间覆盖,单点查询
C. Rikka with Mista
题意 给集合 S,求每个子集和中 4 的个数之和。
idea
- 折半枚举,预处理左右集,各子集元素和。
- 按位统计贡献。
- 对于每位,对右集中数字按后缀排序,枚举左集中选择的元素,二分。
- 基数排序优化。
- 具体实现有请 F0_0H
具体实现
同上
E. Rikka with Game
签到
F. Rikka with Coin
题意 10,20,50,100 四种面值的钱,至少携带多少张,能凑出 w[] 中任意一个数字。
做法
- 令 \(A=max_{i=1}^{n} [\frac{w[i]}{100}]\).
- 10,20,30,40,50,60,70,80,90 可以用 10,20,20,50 四张钱凑出。因此答案的一个上界为 \(A+4\),设 \(ans = A+4\)
- 设 100 面值的钱携带个数为 \(x_1\),那么存在最优解中有 \(x_1 \geq A-3\),因为 \(A=A-4\) 时,至少需要 8 张 50 的钱。\(A-4+8 \geq A+4\)
- 依次枚举剩下的钱依次携带几张,设 50 携带 \(x_2\) 张,20 携带 \(x_3\) 张,10 携带 \(x_4\) 张。
- 那么 \(x_1+x_2+x_3+x_4 \leq A+3\)
- 先枚举 \(x_1,x_2,x_3,x_4\),再逐个判断 w[] 中的每个数字是否能凑出。
- 对于一个数字的判定,依次枚举实际100,50,20用了多少张 \(x_1',x_2',x_3'\)
- 比赛时默认 \(x_1'\) 能取到极大,所以 WA
emmmm 很引人深思的一个问题。
比赛时节奏把控太糟糕,前期被这题直接卡得没掉了。
逆风局,慢下节奏,小心求证,积极寻找视野中遗漏的东西,不要直接:“我做得很对,为什么 WA,烦死咯!”,这不叫证明,这叫憨憨。
G. Rikka with Travels
题意 求 \((l_1,l_2)\) 这样的 pair 数,使得存在长度为 \(l_1,l_2\) 的不相交的链。
idea
- 注意到,在一个连通块中,选出一条链,链长可以取到 1 到直径的每一个数字。
- 统计每个点子树内直径,子树外直径。
- 建坐标系,\(l_1,l_2\) 分别为横纵坐标,问题转化为求若干左下角为 \((0,0)\) 的矩形面积并。
- 具体实现有请 F0_0H
具体实现
- 换根DP
- 单调栈计算面积