2021.2.19[2021省赛模拟] 总结

2021.2.19省赛模拟总结

下午做模拟赛,有一种午后休闲养生的奇异体验...

得分:30(100) + 100(70) + 0(0) = 130

\(T1\) 乘法没开 \(long \ long\) 表示很淦。

T1.天外飞仙(god)

可以发现抓拍一个天外飞仙的代价是关于 \(t\) 的一次函数,表达式为

\[y = (r_i - l_i + 1)(x_i + y_i)t + \sum_{j = l_i}^{r_i} {s_i - c_j} \]

求出表达式后大致有两种做法:

    1. 求出上凸壳,二分求答案
    1. 把直线塞进李超树,直接查询

T2.守望先锋(overwatch)

考虑没有询问,可以设状态 \(f_{u, i, 0/1}\) 表示点 \(u\) 开始向下延伸 \(j\) 个点的能力值之和的 最大 / 次大 值,转移很简单。

那么最后答案为

\[\max_{i = 1}^{n}{\max_{j = 1}^{m}{ \begin{cases} f_{i, j, 0} + f_{i, m - j + 1, 0} , & [g_{i, j, 0} \neq g_{i, m - j + 1, 0}] \\[2ex] \max(f_{i, j, 0} + f_{i, m - j + 1, 1}, \ f_{i, j, 1} + f_{i, m - j + 1, 0}) , & [g_{i, j, 0} = g_{i, m - j + 1, 0}] \end{cases} }} \]

其中 \(g_{i, j, 0}\) 表示 \(f_{i, j, 0}\) 由点 \(i\) 的哪个儿子转移过来,保证 \(g_{i, j, 0} \neq 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\)

然后又可知:

\[ans(p, q) = \begin{cases} ans(p - q, q) \cdot 2 + 1 , & [p < q] \ (1) \\[2ex] ans(p, q - p) \cdot 2 , & [p > q] \ (2) \end{cases} \]

发现此过程类似辗转相除法,所以考虑每次直接模,对于 \((2)\)就是 \(ans(p, q - p) \cdot 2^{p / q}\)

对于 \((1)\),假设我们在对一个二进制数操作,那么每次操作其实就是在二进制数的末尾加 \(1\),那么最后就是 \(ans(p - q, q) \cdot 2^{q / p} + 2^{q / p} - 1\)

光速幂预处理 \(2\) 的幂即可。

posted @ 2021-02-19 22:38  buzzhou  阅读(159)  评论(0编辑  收藏  举报