A

贪心。每删除 k1k-1 个栅栏必须留下一个。答案为 nk(k1)+nmodk\lfloor \frac{n}{k}\rfloor(k-1)+n\mod k

B

假设我们已经确定了最后把钱放在哪个银行,对于其余的银行 ii,除了 aimodxa_i \mod x 余下的钱都是可以被转移到最后那个银行去的。枚举即可。

为什么 aimodxa_i \mod x 的余数不能被转移?假设我们为了转移这个余数 kk,将另外 c0c_0 笔钱移过来,凑好了一些钱,转移了 c1c_1 次到最后的目标银行里。那么这个过程中凑到这个银行里的钱数就是 c0y+kc_0\cdot y+k,转出的钱数是 c1xc_1\cdot x,最后对答案的贡献是 c1yc_1\cdot y。如果 c1<c0c_1<c_0,那这个过程是劣的,不如直接把钱转到最后的银行里。而 c0c1,yx,k<xc_0\leq c_1,y\leq x,k<xc0y+kc1xc_0\cdot y+k\geq c_1\cdot x 矛盾。因此这个结论是正确的。

C

模拟。先预处理 10510^5 以内的因数。从小到大枚举答案 lenlen,枚举成功就退出。令 sis_i 为输入的第 ii 个字符串。令 SiS_ij=1k{sj,i}\bigcup\limits_{j=1}^{k}\{s_{j,i}\},即所有 kk 个字符串在下标 ii(字符串的下标从 00 开始)的字符组成的集合。cnt=nlencnt=\frac{n}{len}lenlen 作为答案合法的条件是 p[0,len),imodlen=pSi\forall p\in [0,len),\bigcap\limits_{i\mod len=p}S_i≠\varnothing。可以用位运算实现。

D

令被划分到左下部分的位置的和为 ww,矩阵的总和为 ss,则答案为 w(sw)=w2+sww(s-w)=-w^2+sw,在 w=s2w=\lfloor\frac{s}{2}\rfloors2\lceil\frac{s}{2}\rceil 处取到最大值。把这个最优的 ww 求出来。我们直接从下往上遍历行,一行里从左往右遍历列,找出在哪个位置 (i,j)(i,j),第 ii 行里 jj 及其左边的和加上第 i+1i+1 行下面的所有行的和正好是 ww。这个位置一定存在。然后模拟输出方案即可。

E

以左上角为起点,右下角为终点 dp 一次,记为 fi,jf_{i,j};以右下角为起点,左上角为终点 dp 一次,记为 gi,jg_{i,j}。然后考虑枚举对哪个位置取反。发现此时的答案是可以用 ffgg 拼起来表示的。

如果枚举到图里的红色位置,那么不经过红色位置的答案可以用图里蓝色圆圈位置的 ff 和绿色方框位置的 gg 拼起来,经过红色位置的答案可以用红色位置的 ffgg 叠加,再减去三倍的红色位置的值。处理一下前者的前缀和后缀最大值,再对所有答案取个 min\min。需要注意边界。

qq 群里群友教了一个高手的实现:可以不用钦定是否经过跟红色位置在一行的位置,转而钦定经过跟它在一条斜线上的位置。边界情况少很多。

F1

考虑暴力的(有一维是异或和)的 dp 状态 fu,xf_{u,x}。它应该代表什么?在某个点 uu 继承子树状态的时候,我们当然想知道 uu 所属的连通块目前的异或和是多少,状态里的 xx 自然就代表这个值。如果 vvuu 的儿子,从 fv,yf_{v,y} 转移到 fu,xf_{u,x} 的转移自然就分是否断开 (u,v)(u,v) 两种,如果不断开则是 fu,xfv,yfu,xyf_{u,x}\leftarrow f_{v,y}\cdot f_{u,x\oplus y},断开则是 fu,xfv,y[yb]fu,xf_{u,x}\leftarrow f_{v,y}[y\in b]\cdot f_{u,x}。这个暴力的复杂度是 O(nV2)\mathcal{O}(nV^2)

发现 kk 很小,考虑把值域维度优化为与 2k2^k 相关,将直接把值放在状态里换成用集合 bb 里的元素状态来表示值,将复杂度优化到 O(4kn)\mathcal{O}(4^kn)。令 wS=iSbiw_S=\bigoplus\limits_{i\in S}b_i

  • 能否直接用 fu,Sf_{u,S} 表示原来的 fu,wSf_{u,w_S}?我们发现,这样表示的瓶颈在于当一个连通块还没完全形成时,它的异或和并不一定能够被某个 wSw_S 表示。
  • 考虑不记录当前连通块的值,而是记录当前所有已经被切掉的子树的异或和。由于每个被切掉的子树的异或和都属于 bb,这些异或和的异或和一定可以被 wSw_S 表示!这样我们就得到了正确的状态设计,像暴力那样转移即可。实现时注意有些 SS 异或出来的结果可能是相同的,需要判一下。