【2024暑假集训ACM2】G.Competition 做题记录

对于一个 0101 序列,其得分计算方式如下:

  • v=0,w=1v=0,w=1
  • 从前往后依次遍历序列,设当前位为 xx
    • x=0x=0vv1v\to v-1
    • x=1x=1:先 vv+2v\to v+2,再 ww×vw\to w\times v

求所有有 nn11mm000101 序列的得分和,对 998244353998244353 取模。

1n2×1051\le n\le 2\times 10^50m1090\le m\le 10^9

转化为格路计数问题:

每一步从 (x,y)(x,y) 走到 (x+1,y)(x+1,y)(x,y+1)(x,y+1)

  • (x,y)(x,y) 走到 (x+1,y)(x+1,y) 会让路径权值乘上 2xy+22x-y+2
  • (x,y)(x,y) 走到 (x,y+1)(x,y+1) 会让路径权值乘上 11

求从 (0,0)(0,0) 走到 (n,m)(n,m) 的所有路径权值之和。

考虑把每一步转移放入序列 aa 中,x+1x+111,否则为 00,则对于每个 aia_i

  • ai=1a_i=1
    • ii 和它前面的每个 11 都会造成 22 的贡献,故其可以和前面的每个 11 连权值为 22 的无向边 ;
    • ii 和它前面的每个 00 都会造成 1-1 的贡献,故其可以和前面的每个 00 连权值为 1-1 的无向边;
    • ii 还会额外贡献 22 的权值,故其可以和点 00 连权值为 22 的无向边;
  • ai=0a_i=0 则只能和点 00 连权值为 11 的无向边;

那么最终会形成以 00 为根的父亲编号比儿子小的一棵树,并且除了点 00 外其它点的儿子 vv 必定满足 av=1a_v=1

那么根据 00 的每个儿子满足 av=0a_v=0 还是 av=1a_v=1 计算其子树的答案,最后 EGF 组合起来即可。

fnf_n 表示 av=0a_{v}=0 且大小为 nn 的子树的边权积的和(包括 (0,v)(0,v) 这条边),gng_n 表示 av=1a_v=1 且大小为 nn 的子树的边权积的和(包括 (0,v)(0,v) 这条边),那么考虑最后一个点带来的贡献,有:

fn=fn1×(2(n2)1)gn=gn1×2(n1)f_n=f_{n-1}\times(2(n-2)-1)\\ g_n=g_{n-1}\times2(n-1)\\

初值 f0=0,f1=1,g0=0,g1=2f_{0}=0,f_{1}=1,g_{0}=0,g_{1}=2

F(x)F(x)G(x)G(x) 分别为 ffgg 的 EGF,则答案即为 [xn+m(n+m)!](F(x)mm!eG(x))\left[\frac{x^{n+m}}{(n+m)!}\right]\left(\frac{F(x)^m}{m!}e^{G(x)}\right)

注意到 [x0]F(x)=0[x^0]F(x)=0,所以 F(x)F(x) 可以提出一个 xx,答案变为 (m+n)!m![xn]((F(x)x)meG(x))\frac{{(m+n)!}}{m!}\left[x^{n}\right]\left(\left(\frac{F(x)}{x}\right)^me^{G(x)}\right)

进一步,注意到 eG(x)e^{G(x)} 也是很好求的,设 [xnn!]eG(x)=hn[\frac{x^n}{n!}]e^{G(x)}=h_n,则考虑最后一个点带来的贡献可以直接求出 hh

hn=hn1×(2(n1)+2)h_{n}=h_{n-1}\times (2(n-1)+2)

其中 h0=1,h1=2h_0=1,h_1=2

hh 的 EGF 为 H(x)H(x),则答案即为 (m+n)!m![xn]((F(x)x)mH(x))\frac{{(m+n)!}}{m!}\left[x^{n}\right]\left(\left(\frac{F(x)}{x}\right)^mH(x)\right),可以直接 O(nlogn)O(n\log n) 算,或者直接快速幂做到 O(nlog2n)O(n\log ^2n)