A. 石子游戏
容易发现答案大约是log级别的,然后可以考虑一个暴力dp,记录当前一共选择了几个。
发现dp的转移顺序并不是必要的,而重复的转移也一定不优,所以可以考虑将所有状态放到一起转移,然后就可以fwt来优化了。
fwt的过程中不用每次都转化回去,直接用点值展开一项就可以判断有没有解。
B. 函数
是一种叫做powerful number的奇怪东西的模板题。
定义就是所有质因子的幂次不小于2。然后令$f=g*h$,其中$g(x)=x^k$,那么由于$h=f/g$,所以h也是积性函数,展开f在质数处的取值可以的得到h在非power number处的取值一定为0。
然后问题就是求出来h在所有powerful number处的取值,归纳可以得到$h(x)=x^k-x^{2k}$。
由于符合条件的数的个数很少,所以暴力搜索出来然后对于每个都计算贡献就行了。
C. 画
假如不存在限制,那么找到所有数最高的二进制位,将所有数根据这一位为0或1分成两组。然后分情况讨论:
1.若为1的一组这一位全部填1,那么向下递归。
2.若为1的一组有任意一个数这一位不是1,那么其他数只要满足了最高位的限制,低位不管怎么填都可以由这个数调整。
所以第一部分向下递归,第二部分暴力dp统计答案。
考虑限制,就整个容斥,钦定不满足的边集统计贡献。由于边集很大,所以考虑钦定整个点集相同,然后计算边集的方案数进行容斥。边集的方案数可以通过减去不合法的得到。
然后用dp将这些点集的连通块拼到一起即可。
考虑这个dp,发现我们要计算贡献只需要知道大小为奇数的连通块的$limit$最小的点,所以将所有这样的点压到状态里。
为了计数方便,我们钦定转移必须包含剩余集合中$limit$最小的点。然后暴力进行转移。复杂度看似很迷,实际上还是正确的。