考虑只有相邻不同怎么做。也就相当于是 \(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 也是可以的。
参考代码。