计数题乱做
计数水平下滑非常严重,于是来练计数题了。
[AGC056B] Range Argmax(自己做出)
AGC 的 B 题要花这么久,我是普及组选手。
先考虑判定性问题,即 \(\{x_1,x_2,\cdots,x_m\}\) 何时合法。考虑先确定 \(\text{argmax}[1,n]\)。显然,\(x_p\) 能够成为 \(\text{argmax}[1,n]\),当且仅当所有包含 \(p\) 的区间的 \(\text{argmax}\) 均为 \(p\)。不妨令 \(x\) 为满足条件的 \(p\) 中最小的一个。此时 \([1,x),(x,n]\) 是独立的子问题,递归地构造即可。
再考虑计数。考虑区间 \(\text{dp}\)。令 \(f_{l,r}\) 表示 \([l,r]\) 的答案,枚举 \(x \in [l,r]\) 并钦定 \(\text{argmax}[l,r]=x\) 并从 \(f_{l,x-1},f_{x+1,r}\) 两边转移过来。但需要注意,\([l,x)\) 中不得存在满足要求的 \(p\),这要求必须存在 \([l_i,r_i]\) 同时包含 \(\text{argmax}[l,x)\) 及 \(x\)。也就是说,我们可能对 \(\text{argmax}[l,r]\) 进行了限定,从而要再加一维 \(u\) 表示要求 \(\text{argmax}[l,r] \ge u\),然后就能正常转移了。
时间复杂度 \(O(n^3)\)。
[AGC055D] ABC Ultimatum(看了题解)
Lemma. 有解当且仅当
其中 \([l,r,c]\) 表示 \([l,r]\) 中字符 \(c\) 的出现次数。
必要性显然。充分性不管。
那么直接 \(O(n^6)\) 地 \(\text{dp}\) 就好了,维护前缀中三种字符的出现次数以及三个值,转移是 \(O(1)\) 的。
CF1146F(自己做出)
简单树形 \(\text{dp}\) 题。
考虑从每个叶子节点往上延申,到某个祖先处终止。那么连通子图两两不交,等价于每个点被延伸到的次数不超过 \(1\)。
那么设计 \(\text{dp}\) \(f_u/g_u/h_u\) 表示,传上来的儿子有 \(0/1/2\) 个的方案数。则有转移:
其中 \(\text{son}\{u\}\) 表示 \(u\) 的儿子集合。对于叶子 \(u\),边界为 \(f_u=g_u=0,h_u=1\)。答案为 \(f_1+h_1\)。
随便优化就线性了。
CF1615F(看了题解)
先考虑如何判定 \(s\) 能否达 \(t\)。考虑将 \(s,t\) 的偶数位反转,则每次操作等价于交换 \(s\) 的两位。那么可达当且仅当 \(s,t\) 中 \(1\) 的数量相等。
再考虑如何计算 \(s\) 到 \(t\) 的最少步数。将 \(s,t\) 中 \(1\) 的位置分别从前往后列出,则最少步数为两个对应位置差的绝对值之和。
然后随便 \(\text{dp}\) 一下就好了,从前往后,从后往前,维护当前匹配的两个 \(1\) 分别在什么位置,那么每次转移都相当于矩形查询,维护前缀和即可,时间复杂度 \(O(n^2)\)。

浙公网安备 33010602011771号