对于某个集合 S⊆{1,⋯,n}S\subseteq\{1,\cdots,n\}S⊆{1,⋯,n},考虑能不能删去 SSS。
对于任意 x∈Sx\in Sx∈S,连边 x→x−2x\to x-2x→x−2(如果 x−2∈Sx-2\in Sx−2∈S)及 x→x+kx\to x+kx→x+k(如果 x+k∈Sx+k\in Sx+k∈S),那么能把 SSS 删去当且仅当这张图是一个 DAG。
于是我们先对所有点都这么连边形成图 GGG,那么 SSS 合法当且仅当 SSS 在 GGG 中的导出子图是个 DAG,即无环。
对于所有 x→x−2x\to x-2x→x−2 的边,它们形成了两条链,分别称为奇链和偶链。然后我们对 kkk 的奇偶性分类讨论:若 kkk 是偶数,那么这两条链是不连通的(独立的),而无环相当于要求每条链中不连续选 k/2+1k/2+1k/2+1 个点,这个方案数很好统计(注意数据范围不大,暴力 DP 即可)。
若 kkk 是奇数,情况就复杂些。首先,若出现了环,那么一定经过了正偶数条 x→x+kx\to x+kx→x+k 的边(经过一次会改变一次当前点的奇偶性)。接下来我们证明,一个简单环必定只经过了恰好 222 条 x→x+kx\to x+kx→x+k 的边。
对于任意一个简单环 CCC,取其编号最小的点 aaa,那么环中 aaa 的上一个点一定是 a+2a+2a+2,下一个点一定是 a+ka+ka+k(记为 bbb)。而且我们发现,对于 a,a+2,⋯,b−1a,a+2,\cdots,b-1a,a+2,⋯,b−1 中的任意一个点 xxx,xxx 在环中都不可能是 +k+k+k 得到的(否则 aaa 不是最小点),于是我们已经可以确定 CCC 的一部分形态,如上图左上。
接着,bbb 在环中接下来肯定是先走若干步 −2-2−2(可以是 000 步,但不能超过 aaa)走到 ccc,然后再走一步 +k+k+k 走到 ddd,如上图左下。
接着,如上图右,我们又继续考虑 e=b+1e=b+1e=b+1 这个点是从哪来的,若它是 +k+k+k 得到的,那么就必然要经历从 b−1,bb-1,bb−1,b 右侧到 b−1,bb-1,bb−1,b 左侧的过程(从 ddd 经过若干步到达 a+1a+1a+1),这个过程中一定会再次经过 b−1,bb-1,bb−1,b 中的某一个点,这就与该环是简单环矛盾了。从而,eee 是从 e+2e+2e+2 来的。类似地,可以推出 b+1,b+3,⋯,d−2b+1,b+3,\cdots,d-2b+1,b+3,⋯,d−2 中的每一个点 xxx 都是从 x+2x+2x+2 来的,这就和 ddd 接起来了。
于是 CCC 只有可能是 a→一步+kb→若干步−2c→一步+kd→若干步−2aa\xrightarrow{\text{一步}+k}b\xrightarrow{\text{若干步}-2}c\xrightarrow{\text{一步}+k}d\xrightarrow{\text{若干步}-2}aa一步+kb若干步−2c一步+kd若干步−2a 的形态。
那么,现在限制改为了,SSS 在 GGG 中的导出子图不能出现环,且该环恰经过两次 +k+k+k,如下图左上。
假设 SSS 已经选好了,怎么快速判断是否存在这样的环:可以从每个 SSS 中的奇数编号的点 xxx 开始,按如下方式找一条路径(称为 xxx 的找环路)并检查:
-
找到最小的 yyy 使得 {y,y+2,⋯,x−2,x}⊆S\{y,y+2,\cdots,x-2,x\}\subseteq S{y,y+2,⋯,x−2,x}⊆S。
-
找到最小的 zzz 使得 z∈{y,y+2,⋯,x−2,x}z\in\{y,y+2,\cdots,x-2,x\}z∈{y,y+2,⋯,x−2,x} 且 z+k∈Sz+k\in Sz+k∈S。若找不到这样的 zzz 那么跳过从 xxx 开始的检查。
-
找到最小的 www 使得 {w,w+2,⋯,z+k−2,z+k}⊆S\{w,w+2,\cdots,z+k-2,z+k\}\subseteq S{w,w+2,⋯,z+k−2,z+k}⊆S。
-
考虑路径 P=x→x−2→⋯→z→z+k→z+k−2→⋯→wP=x\to x-2\to \cdots\to z\to z+k\to z+k-2\to \cdots\to wP=x→x−2→⋯→z→z+k→z+k−2→⋯→w,若 PPP 长度大于等于 k+2k+2k+2,那么我们就找到了一个环。
如上图左下,图中的红蓝两条路径就是从两个不同的 xxx 开始的找环路。
容易证明,按照上述方式,若找不到任何一个环,那么图中就确实不存在环(因为从我们所述的 zzz 跳到 z+kz+kz+k,是能使得 PPP 的长度尽量大的)。
那么考虑 DP。如上图右,设 fi,ℓ1,ℓ2f_{i,\ell_1,\ell_2}fi,ℓ1,ℓ2 表示考虑完 [1,i][1,i][1,i] 中的奇数点和 [1,i+k][1,i+k][1,i+k] 中的偶数点,其中从 iii 开始的找环路经过的点数为 ℓ1\ell_1ℓ1,而从 i+ki+ki+k 开始不断 −2-2−2 所能经过的点的个数为 ℓ2\ell_2ℓ2 的方案数。
转移的时候,考虑从 i+2i+2i+2 开始的找环路(假设 i+2∈Si+2\in Si+2∈S):若 i∈Si\in Si∈S 且存在从 iii 开始的找环路,那么从 ℓ1\ell_1ℓ1 转移过来;否则从 ℓ2\ell_2ℓ2 转移过来。转移是 O(1)O(1)O(1) 的。
时间复杂度 O(nk2)O(nk^2)O(nk2),注意 DP 时若 ℓ2>k+2\ell_2> k+2ℓ2>k+2 我们可以直接把它看做 k+2k+2k+2。