2021.2.19省赛模拟总结
下午做模拟赛,有一种午后休闲养生的奇异体验...
得分:30(100) + 100(70) + 0(0) = 130
(T1) 乘法没开 (long long) 表示很淦。
T1.天外飞仙(god)
可以发现抓拍一个天外飞仙的代价是关于 (t) 的一次函数,表达式为
求出表达式后大致有两种做法:
-
- 求出上凸壳,二分求答案
-
- 把直线塞进李超树,直接查询
T2.守望先锋(overwatch)
考虑没有询问,可以设状态 (f_{u, i, 0/1}) 表示点 (u) 开始向下延伸 (j) 个点的能力值之和的 最大 / 次大 值,转移很简单。
那么最后答案为
其中 (g_{i, j, 0}) 表示 (f_{i, j, 0}) 由点 (i) 的哪个儿子转移过来,保证 (g_{i, j, 0} eq g_{i, j, 1})。
对于修改点 (u),发现其影响到的点只有 (u) 及 (u) 以上的 (m - 1) 个祖先,所以我们考虑对于每个点 (u),将其儿子分别塞入 (m) 个 (set) 中(分别对于 (m) 个深度),那么每次修改就是 (O(k^2 log{n})) 的,查询的话可以再用一棵线段树存下每个点 (set) 中最大值 + 次大值。
总时间复杂度 (O((q + n) k^2 log{n}))。
但是由于保证数据纯随机,所以修改时暴力重新转移 (m) 个点也能过。
T3.甲鱼漂泊(jypb)
只会打表找规律。
首先可以知道 (ans(1, x) = 2^{x - 1}, ans(x, 1) = 2^x - 1)。
然后又可知:
发现此过程类似辗转相除法,所以考虑每次直接模,对于 ((2))就是 (ans(p, q - p) cdot 2^{p / q})。
对于 ((1)),假设我们在对一个二进制数操作,那么每次操作其实就是在二进制数的末尾加 (1),那么最后就是 (ans(p - q, q) cdot 2^{q / p} + 2^{q / p} - 1)。
光速幂预处理 (2) 的幂即可。