uoj241

发布时间 2023-06-19 14:37:00作者: myee

考虑只有相邻不同怎么做。也就相当于是 \(2\nmid n\) 的答案。

这个是经典题。

假设答案为 \(f_n\),那么我们枚举第一个元素,有 \(m\) 种选法,其余元素由于要和前一个元素不同,有 \(m-1\) 种选法。这样可能会统计首尾元素相同的情况,而这种情况的数目为 \(f_{n-1}\)

于是我们有

\[f_n=m(m-1)^{n-1}-f_{n-1} \]

边界不妨为 \(f_0=m,f_1=0\);容易发现这样恰好合法。

也即

\[f_n=[n=0]m+[n>0]m(m-1)^{n-1}-f_{n-1} \]

那么写成 GF 就有

\[f=m+\frac{mz}{1-(m-1)z}-zf \]

\[f=\frac{m-m(m-2)z}{(1+z)(1-(m-1)z)} \]

随便写个常系数齐次线性递推就好啦。

通项其实也可推出;即为

\[f_n=(m-1)^n+(m-1)(-1)^n \]

总复杂度 \(O(\log n)\)

然后由于本题要求相对的位置也要不同,我们考虑 \(2|n\) 的情况怎么做。

我们考虑容斥。

我们设 \(a_n\) 为满足首尾颜色确定且不同,且相邻元素不同的长度为 \(n+1\) 的序列的数目;\(b_n\) 为满足首尾颜色确定且相同,且相邻元素不同的长度为 \(n+1\) 的序列的数目。规定 \(a_0=b_0=0\)

我们设 \(a_n^2\)\(b_n^2\) 分别对应 GF \(\check A\)\(\check B\)

则钦定 \(k\) 个对位必须相同的方案对答案的总贡献(\(k>0\))为

\[(-1)^k\frac{n}{2k}[z^{n/2}]\sum_tf_t[u^t] (u\check A+\check B)^k\\=(-1)^k\frac{n}{2k}[z^{n/2}](((m-1)\check A+\check B)^k+(m-1)(-\check A+\check B)^k) \]

\(G=(m-1)\check A+\check B\)\(H=-\check A+\check B\),我们按 \(k\) 加和,则答案即为

\[\frac n2[z^{n/2}]\sum_k\frac{(-1)^k(G^k+(m-1)H^k)}{k}=\frac n2[z^{n/2}] (\ln\frac{1}{1+G}+(m-1)\ln\frac{1}{1+H})=[z^{n/2-1}] (\frac{-G'}{1+G}+\frac{(1-m)H'}{1+H}) \]

是的,这仍然是一个线性递推!

最后加回 \(k=0\) 时的答案即可。

然后问题来到如何计算 \(G,H\) 这边。

注意到 \([n>0]f_n=mb_n\),于是我们有

\[B(z)=\sum_nb_nz^n=\frac{(m-1)z^2}{1-(m-2)z-(m-1)z^2} \]

\(m(m-1)a_n=f_{n+1}\),于是

\[A(z)=\sum_na_nz^n=\frac{z}{1-(m-2)z-(m-1)z^2} \]

考虑怎么解决 \(\check A\)\(\check B\)

由于 \(B=(m-1)zA\),故 \(\check B=(m-1)^2z\check A\),我们接下来只考虑 \(A\) 怎么解决。

我们有

\[a_n=\frac{(m-1)^n-(-1)^n}{m} \]

从而

\[a_n^2=\frac{(m-1)^{2n}-2(1-m)^n+1}{m^2} \]

于是

\[m^2\check A=\frac{1}{1-(m-1)^2z}-\frac{2}{1+(m-1)z}+\frac{1}{1-z} \]

从而

\[\check A=\frac{z-(m-1)z^2}{1-(m^2-3m+3)z-(m^2-3m+3)(m-1)z^2+(m-1)^3z^3} \]

(不妨动手一试;这里消得很干净)

接下来的内容比较混乱邪恶。由于太难算了所以使用了 https://zh.numberempire.com/expressioncalculator.php 辅助计算。

于是

\[G=\frac{(m-1)z-(m-1)^3z^3}{1-(m^2-3m+3)z-(m^2-3m+3)(m-1)z^2+(m-1)^3z^3} \]

\[1+G=\frac{1-(m^2-4m+4)z-(m^2-3m+3)(m-1)z^2}{1-(m^2-3m+3)z-(m^2-3m+3)(m-1)z^2+(m-1)^3z^3} \]

\[G'=\frac{(m^6-7m^5+21m^4-34m^3+31m^2-15m+3)z^4+(2m^5-14m^4+38m^3-50m^2+32m-8)z^3+(m^4-8m^3+19m^2-18m+6)z^2+m-1}{(1-(m^2-3m+3)z-(m^2-3m+3)(m-1)z^2+(m-1)^3z^3)^2} \]

\[\frac{G'}{1+G}=\frac{(m^6-7m^5+21m^4-34m^3+31m^2-15m+3)z^4+(2m^5-14m^4+38m^3-50m^2+32m-8)z^3+(m^4-8m^3+19m^2-18m+6)z^2+m-1}{(-m^6+7m^5-21m^4+34m^3-31m^2+15m-3)z^5+(m^6-9m^5+35m^4-73m^3+85m^2-52m+13)z^4+(2m^5-15m^4+48m^3-79m^2+66m-22)z^3+(m^4-9m^3+27m^3-36m+18)z^2+(-2m^2+7m-7)z+1} \]

\[H=\frac{-z+(m^2-m)z^2-(m-1)^3z^3}{1-(m^2-3m+3)z-(m^2-3m+3)(m-1)z^2+(m-1)^3z^3} \]

\[1+H=\frac{1-(m^2-3m+4)z-(m^2-4m+3)(m-1)z^2}{1-(m^2-3m+3)z-(m^2-3m+3)(m-1)z^2+(m-1)^3z^3} \]

\[H'=\frac{(m^6-8m^5+25m^4-40m^3+35m^2-16m+3)z^4+(2m^5-12m^4+32m^3-44m^2+30m-8)z^3+(-m^4+7m^2-12m+6)z^2+(2m^2-2m)z-1}{(1-(m^2-3m+3)z-(m^2-3m+3)(m-1)z^2+(m-1)^3z^3)^2} \]

\[\frac{H'}{1+H}=\frac{(m^6-8m^5+25m^4-40m^3+35m^2-16m+3)z^4+(2m^5-12m^4+32m^3-44m^2+30m-8)z^3+(-m^4+7m^2-12m+6)z^2+(2m^2-2m)z-1}{(-m^6+8m^5-25m^4+40m^3-35m^2+16m-3)z^5+(m^6-10m^5+39m^4-80m^3+91m^2-54m+13)z^4+(2m^5-15m^4+48m^3-79m^2+66m-22)z^3+(m^4-8m^3+25m^2-34m+18)z^2+(-2m^2+6m-7)z+1} \]

只能说过于非人类了。

然后最后写一个常系数齐次线性递推就完工啦。

这整道题目的答案容易发现还是一个有理函数,所以直接上 BM 也是可以的。

参考代码