circular
考场上的乱搞搞:
环上的线段覆盖
对于 30% 的数据: N ≤ 1000 : 暴力枚举起始线段,贪心 O(n^2)
对于 100% 的数据: N ≤ 100000 : 先破环成链,随机起始点,只处理 [ s, s + M ] 的线段,玄学AC,计算结果只可能是 ans 或 ans - 1,多处理几次,正确率还是挺高的 O(随机次数 * n)
正解:
预处理跑一遍,nxt[i] 记录下一次选的区间,倍增处理 O(n * logn)
admirable
一开始看没什么思路,就先写了第三题,再回看时间也不太多了,暴力感觉有点复杂,最后也没打出来
正解:
若不是返祖路径,f(x)记录在x的子树中选k个点的方案数,那么路径 x - y 对答案的贡献即为 f(x) * f(y)
若为返祖路径,g(x, i) 记录 x 第 i 个儿子方向的 f(x),路径 x - y 对答案的贡献即为 f(x) * g(y, i)
f, g 可以分治 fft 求得
illustrious
数论先打表:
对于 10% 的数据,有 1 ≤ n ≤ 1000 :直接暴力
对于 50% 的数据,有 1 ≤ n ≤ 10^6 :打完10分暴力发现主要问题出在 g(g(n)),g(n)过大导致数组越界,考虑线性推出 g(g(n)),打个表发现规律
正解:
对于 100% 的数据,有 1 ≤ T ≤ 5, 1 ≤ n ≤ 10^9 :分段打表 (因为询问次数只有5,考试时就一直在想怎么单独求 h(n),最后还是没推出来)