CF1895

发布时间 2023-11-10 21:59:21作者: Tagaki

CF1895

D

考虑将原条件转化为 \(b_{i+1}=b_{i}\oplus a_i\),那么确定了 \(a_0\) 就可以确定所有 \(b\) 。暴力是枚举 \(a_0\),计算所有 \(b\) 的最大值,考虑在 trie 上计算异或最大值。

其他做法:按位考虑,每位只有两种方法,考察 \(c_0=c_1\) 的条件,发现是 \(2^b\mid n\),且如果一种放法可行,那么另一种也可行。

E

当前选择了一个数,下一个数可以唯一确定,直接连边,有向图博弈,倒序 bfs 即可。

来点更普适的做法:考虑前缀优化建图,容易发现一些边不是状态的转移,而是状态的等价关系,考虑到 sg 函数的计算,中间加一个点即可。

F

结合条件 1 和条件 2 分析得到不可能跨过 \([x,x+k-1]\) 的情况,那么条件 1 转化为 \(\max \ge x,\min \le x+k-1\) 。计数,考虑容斥,不妨对 \(\max\ge x\) 进行容斥,首先计算满足 \(\min \le x+k-1,|a_i-a_{i+1}|\le k\) 的方案数。一个序列可以由相对值和任意一个元素固定,钦定为 \(\min\),方案数为 \((x+k)(2k+1)^{n-1}\),这也恰好满足了非负的限制。对于 \(\max<x\) 的限制,列出 dp,倍增优化 dp 即可。

类似推导方法:考虑钦定上界 \(M=10^{100}\)提取相关量,设 \(f(l,r)\) 表示区间的数属于 \([l,r]\) 且满足条件 2 的方案数。容斥要求 \(f(0,M)-f(0,x-1)-f(x+k,M)\),其中 \(f(0,x-1)\) 用倍增优化 dp,还剩 \(f(0,M)-f(x+k,M)\) 。考虑 暴力,直接枚举 \(a\) 数组,但是不能优化,考虑 调整,不妨枚举 相对值 \(\Delta\),那么就是看 \(\max-\min\) 了,由于 \(M\) 足够大,那么 \(M,\max,\min\) 可以直接消去,得到上面的式子。

总结:差分,前缀和,相对值和任意一个元素固定序列,dp 某些维度转移相同,考虑倍增,最好的方法是矩阵描述转移,其次就根据题目来。