这场的 E 题比 F 题的难度大 hh~。
我的 AC 代码:
A
如果 \(c=1\) 不妨交换先手,让第一个人糖果数 \(+1\) 减少情况。
B
按题意模拟即可。
C
范围很小,直接二进制枚举更新答案。
D
设一组满足的区间为 \([l, r]\),那么有
\[\frac{(l+r)(r-l+1)}{2} = N
\]
那么枚举 \(2N\) 的约数即可,复杂度 \(O(\sqrt N)\)(注意到不可能出现 \(l+r= r-l + 1\) 的情况,不特判也行)。
E
首先因为关键点很少,所以可以用 \(bfs\) 处理出关键点之间的最短路 \(dis[u][v]\)。
然后考虑 \(dp\),\(f[u][st]\) 表示 \(K\) 个点当前在 \(u\) 点,已经覆盖过的二进制状态为 \(st\),进行转移即可。
注意记忆化搜索比较慢,可能会超时(亲测,挂了一发),建议采取递推写法。
F
初始序列 \(b=a\),因为每次都相当于将序列 \(b\) 的首元素丢到最后,可以发现它对逆序对数的影响就是加上比它大的数的个数,减去比它小的元素个数。
那么我们一开始计算出序列的逆序对数 \(res\),然后依次更新即可。