题解 小孩召开法

Description

loj6731

Solution

复读自 disangan233的题解 增加了一些解释 , 修改了一些错误 .

\(a_k(n)\) 为长度为 \(n\) , 最长交替子序列长度为 \(k\) 的方案数 .
那么有 \(\displaystyle a_k(n)=\sum\limits_{j=1}^n\binom{n-1}{j-1}\sum\limits_{2r+s=k-1}(a_{2r}(j-1)+a_{2r+1}(j-1))a_s(n-j)\)
解释是枚举最大值所在位置 , 此时最大值左边如果有奇数个就让最大值代替左边的末尾 , 否则直接把最大值接到左边末尾即可 , 注意为了把右边的长度都计入贡献内 , 要把右边所有数取反使得 \(101010\) 型序列变为 \(010101\) 型序列 .

\(F_k(x)\)\(a_k(n)\) 的 EGF
那么上面的递推式可以表示为 \(\displaystyle F_k'(x)=\sum\limits_{2r+s=k-1}(F_{2r}(x)+F_{2r+1}(x))F_s(x)\), 求导是因为直接相乘的话 \((a_{2r}(j-1)+a_{2r+1}(j-1))x^{j-1}a_s(n-j)x^{n-j}\) 会贡献给 \(x^{n-1}\), 但需要它们贡献给 \(x^n\), 而 EGF 的求导恰好对应了原序列的向左平移 .

\(\displaystyle A(x,t)=\sum\limits_{k\geq 0}F_k(x)t^k,A_1(x,t)=\sum\limits_{2k\geq 0}F_{2k}(x)t^{2k},A_2(x,t)=\sum\limits_{2k+1\geq 0}F_{2k+1}(x)t^{2k+1}\)
那么显然有
\(\displaystyle A_1(x,t)=\frac12(A(x,t)+A(x,-t))\\A_2(x,t)=\frac12(A(x,t)-A(x,-t))\\A(x,t)=A_1(x,t)+A_2(x,t);\\A(x,-t)=A_1(x,t)-A_2(x,t)\)

我们尝试求 \(A(x,t)\) 关于 \(x\) 的偏导 , 就是只把 \(x\) 作为变量 , 其他都作为常数时求出的导数 .

\(\begin{aligned}\frac{\partial A(x,t)}{\partial x}&=\sum\limits_{k\geq 0}t^kF_k'(x)\\&=\sum\limits_{k\geq 0}t^k \sum\limits_{2r+s=k-1}(F_{2r}(x)+F_{2r+1}(x))F_s(x)\end{aligned}\)
发现这正是 \((tA_1(x,t)+A_2(x,t))A(x,t)\)
可得
\(\displaystyle \frac{\partial A(x,-t)}{\partial x}=(-tA_1(x,-t)+A_2(x,-t))A(x,-t)\),
注意到 \(A_1(x,t)\) 关于 \(t\) 为偶函数 , \(A_2(x,t)\) 关于 \(t\) 为奇函数 , 那么可以写为
\(\displaystyle \frac{\partial A(x,-t)}{\partial x}=(-tA_1(x,t)-A_2(x,t))A(x,-t)\)

现在来求 \(A_1(x,t),A_2(x,t)\) 关于 \(x\) 的偏导

\(\displaystyle \frac{\partial A_1(x,t)}{\partial x}=\frac12 \left(\frac{\partial A(x,t)}{\partial x}+\frac{\partial A(x,-t)}{\partial x} \right)=tA_1(x,t)A_2(x,t)+A_2^2(x,t)\)
\(\displaystyle \frac{\partial A_2(x,t)}{\partial x}=\frac12 \left(\frac{\partial A(x,t)}{\partial x}-\frac{\partial A(x,-t)}{\partial x} \right)=tA_1^2(x,t)+A_1(x,t)A_2(x,t)\)

那么有
\(\begin{aligned} \frac{\partial(A_1^2(x,t)-A_2^2(x,t))}{\partial x}&=\frac{\partial A_1^2(x,t)}{\partial x}-\frac{\partial A_2^2(x,t)}{\partial x}\\&=2A_1(x,t)\frac{\partial A_1(x,t)}{\partial x}-2A_2(x,t)\frac{\partial A_2(x,t)}{\partial x}\\&=0\end{aligned}\)

这说明 \(A_1^2(x,t)-A_2^2(x,t)\) 对于 \(x\) 来说是常数 .
注意到除了 \(a_0(0)=1\) 外 , \(a_0(n)=0(n>0)\)
所以 \([x^0t^0](A_1^2(x,t)-A_2^2(x,t))=1\), 而其他的 \([x^0t^n](A_1^2(x,t)-A_2^2(x,t))=0,(n>0)\)
这说明 \(A_1^2(x,t)-A_2^2(x,t)=1\)
\(\displaystyle\frac{1}{A_1(x,t)+A_2(x,t)}=A_1(x,t)-A_2(x,t)\)

所以
\(\begin{aligned}\frac{\partial A(x,t)}{\partial x}&=(tA_1(x,t)+A_2(x,t))A(x,t)\\&=\frac12((t+1)(A_1(x,t)+A_2(x,t))+(t-1)(A_1(x,t)-A_2(x,t)))A(x,t)\\&=\frac12\left((t+1)A(x,t)+\frac{t-1}{A(x,t)}\right)A(x,t)\\\frac2{\partial x}&=\frac{\left((t+1)A(x,t)+\frac{t-1}{A(x,t)}\right)A(x,t)}{\partial A(x,t)}\end{aligned}\)

\(b_k(x)=\sum\limits_{i\leq k}a_i(x)\),\(G_k(x)\)\(b_k(x)\) 的 EGF .
\(B(x,t)=\sum\limits_{k\geq 0}G_k(x)t^k\)
因为 \(B(x,t)\)\(A(x,t)\) 前缀和 , 那么有 \((1-t)B(x,t)=A(x,t)\)
那么

\(\begin{aligned}\frac2{\partial x}&=\frac{\left((t+1)A(x,t)+\frac{t-1}{A(x,t)}\right)A(x,t)}{\partial A(x,t)}\\&=\frac{(1-t)(1-t^2)B(x,t)+(t-1)}{\partial (1-t)B(x,t)}\\&=\frac{(1-t^2)B^2(x,t)-1}{\partial B(x,t)}\end{aligned}\)
\(\rho=\sqrt{1-t^2}\)
那么上式可改写为
\(\displaystyle \partial(\rho B(x,t))\left(\frac{1}{\rho B(x,t)-1}-\frac{1}{\rho B(x,t)+1}\right)=\rho \partial x\)
两边做不定积分
\(\displaystyle \ln \frac{\rho B(x,t)-1}{\rho B(x,t)+1}=\rho x+C'(t)\\ \frac{\rho B(x,t)-1}{\rho B(x,t)+1}=e^{\rho x}C(t)\)
其中 \(C'(t),C(t)\) 关于 \(x\) 都是常数 .
代入 \(\displaystyle B(0,t)=\frac1{1-t}\)
解得 \(\displaystyle C(t)=\frac{1-\rho}{t}\)

所以
\(\begin{aligned}B(x,t)&=\frac{1+e^{\rho x}C(t)}{\rho(1-e^{\rho x}C(t))}\\&=\frac1\rho \left(\frac2{1-e^{\rho x}C(t)}-1\right)\end{aligned}\)
其中 \(-\frac1\rho\)\(x^0\) 项系数 , 将其忽略 .

\(\begin{aligned}B(x,t)&=\frac1\rho \frac2{1-e^{\rho x}C(t)}\\&=\frac2\rho(1-\frac{1-\rho}{t}e^{\rho x})^{-1}\\&=\frac2\rho\sum\limits_{r\geq 0}\left(\frac{1-\rho}{t}e^x\right)^re^{-r(1-\rho)x}\\&=\frac2\rho\sum\limits_{r\geq 0}\left(\frac{1-\rho}{t}e^x\right)^r\sum\limits_{s\geq 0}\frac{(-r(1-\rho)x)^s}{s!}\\&=\frac2\rho\sum\limits_{r,s\geq 0}\left(\frac t2\right)^r\frac{(-rt^2\frac x2)^s}{s!}e^{rx}\left(\frac{2-2\rho}{t^2}\right)^{r+s}\end{aligned}\)

有结论
\(\displaystyle\frac1\rho\left(\frac{2-2\rho}{t^2}\right)^{r+s}=\sum\limits_l\binom{r+s+2l}{l}\left(\frac{t^2}4\right)^l\)
是具体数学 5.72 等式
注意具体数学中的 \(B_2(z)\) 为卡特兰数 , 其封闭形式为 \(\displaystyle\frac{1-\sqrt{1-4x}}{2x}\)
EI的证明


\(\displaystyle B(x,t)=\sum\limits_{r,s,l,m}(-1)^s2^{1-r-s-2l}\binom{r+s+2l}{r+s+l}\binom{s+m}{s}r^{s+m}\frac1{(s+m)!}t^{r+2s+2l}x^{s+m}\)

\(\begin{aligned}b_k(n)&=n![t^kx^n]B(x,t)\\&=2^{1-k}\sum\limits_{r+2s\leq k,r\equiv k\pmod 2}(-2)^s\binom{k-s}{\frac{k+r}2}\binom ns r^n\end{aligned}\)
可以枚举 \(r\) 剩下的问题是快速计算 \(\displaystyle g_k(x)=\sum\limits_{s}(-2)^s\binom ns\binom {k-s}x\)
有递推式 \(\displaystyle g_k(x)=-\frac1x((2n-k)g_k(x-1)+(k+2-x)g_k(x-2))\)

可以采用对 \(k\) 的大小归纳证明
\(n=k\)
\(\begin{aligned}g_n(x)&=\sum\limits_s(-2)^s\binom ns\binom{n-s}x\\&=\binom nx\sum\limits_s(-2)^s\binom{n-x}s\\&=\binom nx(1+(-2))^{n-x}\\&=(-1)^{n-x}\binom nx\end{aligned}\)
然后可以简单验证其成立 .

假设现在已知该式对 \(k-1\) 成立 , 要证明其对 \(k\) 成立 .
使用 \(g_k(x)=g_{k-1}(x)+g_{k-1}(x-1)\)\(k-1\)时的递推式展开式子 .
\(\begin{aligned} &g_k(x)=-\frac1x((2n-k)g_k(x-1)+(k+2-x)g_k(x-2))\\\iff&g_{k-1}(x)+g_{k-1}(x-1)=-\frac1x((2n-k)(g_{k-1}(x-1)+g_{k-1}(x-2))+(k+2-x)(g_{k-1}(x-2)+g_{k-1}(x-3)))\\\iff&-\frac1x((2n-k+1)g_{k-1}(x-1)+(k+1-x)g_{k-1}(x-2))-\frac1{x-1}((2n-k+1)g_{k-1}(x-2)+(k+2-x)g_{k-1}(x-3))\\&=-\frac1x((2n-k)(g_{k-1}(x-1)+g_{k-1}(x-2))+(k+2-x)(g_{k-1}(x-2)+g_{k-1}(x-3)))\\\iff&g_{k-1}(x-1)=-\frac1{x-1}((2n-k+1)g_{k-1}(x-2)+(k+2-x)g_{k-1}(x-3))\end{aligned}\)
发现这就是 \(k-1\) 时的递推式 , 故原命题得证 .

那么直接递推计算 \(g_k(x)\) 即可 , 时间复杂度 \(O(k\log k)\) , 如果使用线性筛求出 \(r^n\) 可以优化至 \(O(k)\)

code
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
ll read()
{
	ll ret=0;bool f=0;char c=getchar();
	while(c>'9'||c<'0')f|=(c=='-'),c=getchar();
	while(c>='0'&&c<='9')ret=(ret<<3)+(ret<<1)+(c^48),c=getchar();
	return f?-ret:ret;
}
const int maxn=1e6+5,mod=998244353;
int qpow(int a,int b){int ret=1;for(;b;b>>=1,a=(ll)a*a%mod)if(b&1)ret=(ll)ret*a%mod;return ret;}
ll n;int k;
int powm2[maxn],ifac[maxn],down[maxn],inv[maxn];
void prework()
{
	powm2[0]=1;for(int i=1;i<=k;i++)powm2[i]=(ll)powm2[i-1]*(mod-2)%mod;
	inv[1]=1;for(int i=2;i<=k;i++)inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
	ifac[0]=1;for(int i=1;i<=k;i++)ifac[i]=(ll)ifac[i-1]*inv[i]%mod;
	down[0]=1;for(int i=1;i<=k;i++)down[i]=(ll)down[i-1]*(n%mod-i+1+mod)%mod;
}
int f[maxn];
int solve(int k)
{
	int ret=0;
	f[1]=0;f[2]=0;
	for(int i=0;i<k;i++)(f[1]+=(ll)powm2[i]*(k-i)%mod*ifac[i]%mod*down[i]%mod)%=mod;
	for(int i=0;i+1<k;i++)(f[2]+=(ll)powm2[i]*(k-i)%mod*(k-i-1)%mod*inv[2]%mod*ifac[i]%mod*down[i]%mod)%=mod;
	for(int i=3;i<=k;i++)f[i]=mod-(ll)inv[i]*((ll)(2*(n%mod)-k+mod)*f[i-1]%mod+(ll)(k+2-i)*f[i-2]%mod)%mod;
	for(int i=k&1;i<=k;i+=2)(ret+=(ll)qpow(i,n%(mod-1))*f[(i+k)/2]%mod)%=mod;
	ret=(ll)ret*qpow(qpow(2,k),mod-2)%mod*2%mod;
	return ret;
}
int main()
{
	freopen("fafa.in","r",stdin);
	freopen("fafa.out","w",stdout);
	n=read();k=read();
	prework();
	printf("%d\n",(solve(k)-solve(k-1)+mod)%mod);
	return 0;
}
posted @ 2022-03-23 21:01  zero4338  阅读(145)  评论(2编辑  收藏  举报