计数
从现在开始写我写过的计数。
这种本质不同的东西可以去想什么结果可以被生成,按照可以被生成的结构的性质去计数,这样就是不重的。
对于这道题,可以转化出时刻 \(i\) 最后对应的在 \(B\) 中的位置,对应关系设为 \(p_i\),显然这个对应关系不是唯一的,但是我们保证这个关系是字典序最小的。
如果我们保证每次插入时的字符右侧的字符都与它不等,它就是合法且唯一对应一个答案的,证明是这样:
必要性是显然的,不满足右侧字符不同则这时两个字符本质相同,一定会有一个重复的 \(p\)。
充分性:假设 \(p_1\) 不同,两个数组一定有第一个时刻是一个数组在 \(p_1\) 左侧插入元素,一个在右侧插入元素。
那么如果这时仍然相同,那么就能推出其有一个长为 \(n-1\) 的 border,进而推出字符串字符全相同,有数组在左侧插入了相同的字符。
因此是充分的, \(p_1\) 相同的找出第一个不同的位置是类似的。
对于这个结构我们就可以 dp 了:设 \(f_{l,r}\) 为生成 \([l,r]\) 合法序列数,然后枚举 \(p_1\),并且保证 \(b_{p_1}!=b_{r+1}\),分割成两个区间是独立的乘起来求和。
对于 A 的限制是简单的,我们在 \(B\) 上匹配 \(A\) ,匹配到的相邻两个字符中间的部分就是生成的部分,乘起来。
复杂度 \(O(n^3)\)。
考虑缩点后对于点数大于二的 dag 计数,从而求出强连通方案数。
设 \(g_S\) 为集合强连通划分带容斥系数和,\(dp_S\) 为集合内强连通方案数。
我们先求 \(g_S\)
实际上我们这时求出的还少了 \(S\) 强连通时的贡献,不过 \(g\) 是用来辅助转移 \(dp_S\) 的并且 \(dp_S\) 要的是点数大于二的,所以也不需要这部分。
经典的枚举 \(0\) 度点是这样:
最后还要给 \(g_S\) 加上 \(dp_S\) 的贡献。
首先这个值最大是 \(O(n^2)\) 级别的。
设 \(f_{i,j}\) 为长度为 \(i\),需要 \(j\) 方案数,转移是枚举 \(p_1\) 值。
然后发现后面一维转移是多项式乘法,于是插值带点,最后插系数出来,复杂度由 \(O(n^6)\) 变为 \(O(n^4)\)。
但是 \(n=200\) 被卡常了。

浙公网安备 33010602011771号