AGC 017 题解

A dp 一下就好了

B


枚举减了多少次,算出这个 n - 1 项数列末项的最小值和最大值,显然这个范围内任何一个数都是可达的

check b 是否在范围内就好了

*C


设 f[i] 表示按 ai 排序的某个前缀 i 个球,是否合法

显然 f[i + num[j]] 在 i + num[j] = j 的时候也是合法的

到这里就不会了,,,

题解巧妙的转化成了线段覆盖,i 号球的是 [i - num[i], i] 这一段,答案就是 [0, n] 间没被覆盖的线段数

为什么?首先所有线段被覆盖次数之和为 n,那么没被覆盖的线段需要从 重复覆盖的线段 移过去,正确性显然。

*D


竟然是经典套路。。学习一波

Hackenbush删边游戏,sg[x] = XOR( sg[son] + 1 ),好像归纳法可证

这玩意还有一些奇奇怪怪的扩展,比如无向连通图上玩游戏。。。

这就需要用环搞事情了(不会

*E


大概想到要转化成图上问题了,但暴力建边 n^2 + 哈密顿路径显然不可做。。。

考虑欧拉路径,h 只有 200,我们将左边贴地高度 k 的形状 和右边离地高度 k 的形状 标号 k,左边离地高度 k 的形状 和右边贴地高度 k 的形状 标号 -k,那么每个积木就成了连接两个形状的有向边

问题就转化成了:能否找到若干条 s -> t 的路径,包含所有边且 s > 0, t < 0

这需要满足条件:

  • x > 0, in[x] <= out[x]
  • x < 0, in[x] >= out[x]
  • 在每个(弱)连通分量中,必须有一个点 x, in[x] != out[x]

正确性还是比较显然的,证明考虑不断拿环就好了。

upd: 别忘了连双向边(可以从 t 搜回 s)

*F


咕咕