问题1
题意:
给定(n),求有多少个(n)排列,满足相邻两项绝对值大于(1)
将位置看作点,对于点(i,i+1),将(|a_i-a_{i+1}|)看作边
考虑容斥,钦定边集不合法
考虑单个连通块的多项式(f(x)=x-2x^2+2x^3-2x^4+cdots=xfrac{1-x}{1+x})
对于点数大于等于(2)的,有正反两种排列顺序
枚举连通块的个数
(F(x)=sumlimits_{i=0}^{infty} i!f(x)^i)
对于一种分段的方法,确定每段最小值的顺序,即可唯一得到排列
那么答案为([x^n]F(x))
令(g(x)=sumlimits_{i=0}^{infty} i!x^i)
注意到(x^2frac{dg(x)}{dx}+(x-1)g(x)+1=0)
将(g(f(x))=F(x),f(x)=xfrac{1-x}{1+x})带进去
通过该式容易得到线性递推
问题2
题意:
给定(n)、(m),求有多少个(n)排列,满足不存在长度超过(m)的相邻两项绝对值等于(1)
定义:若区间内相邻两项绝对值等于(1),则称其为连续区间
求不存在长度为(m+1)的连续区间,钦定有(x)个(m+1)的连续区间(可以相交),容斥系数为((-1)^{x})
考虑钦定连续区间后,排列的方案数
观察:若两个连续区间有交,则区间并也为连续区间
将有交的连续区间合并
令(y)为连续区间的个数(合并后的,这里长度不一定为(m+1)),(z)为未被任意区间包含的位置个数
方案数为((-1)^{x}(y+z)!2^y)
以下区间均指合并后的区间
记(f(i,j,k))表示把前(i)个点分成(j)个区间和(k)个无限制点的容斥系数和,
(g(i,j,k))表示在上述条件下(i)作为区间末尾的容斥系数和
答案为
发现(j)这一维没啥用
答案为
问题3
定义连续区间为相邻两项差为(1),给定(n,k),求有多少个(n)排列恰好有(k+1)段极大连续区间
考虑容斥
令(f_i)为恰好有(i)段极大连续区间的方案数
令(g_i)为钦定(i)段的方案数(即钦定断点,段可能不为极大连续区间)
在求得({g_i})后,通过如下方式还原({f_i})
为方便表示,下面将(f,g)数组整体左移一位,此时表示至多(i)个满足(|a_j-a_{j+1}|>1)的位置
那么有(g_i=sumlimits_{jle i}{n-1-jchoose i-j}f_j)
这不是标准的二项式反演形式,不过我们可以改写成:(g_icdot i!cdot (n-1-i)!=sumlimits_{jle i}{ichoose j}f_jcdot j!cdot (n-1-j)!)
令(G_i=g_icdot i!cdot (n-1-i)!,F_i=f_icdot i!cdot (n-1-i)!)
({G_i},{F_i})间是标准的二项式反演形式
考虑求({g_i})
(g_k=k![x^n](x+2x^2+2x^3cdots)^k=k![x^n](frac{2x}{1-x}-x)^k)
将括号拆开能化成卷积形式