【bzoj 4451】[Cerc2015]Frightful Formula - 递推

  才没有在做cerc2015呢
  看到好像不少人这题写fft卡得死死的啊,不如 O(n) 递推(雾)
  首先可以观察出 (i,1) 这个格子为 x 时对 (n,n) a,b 单独的贡献为 x(n2+nini)an1bni (1,i) 格子同理。这两部分可以直接xjb算出来。
  考虑 (i,j) 格子的 c (n,n) 的贡献,为

i=2nj=2n((ni)+(nj)ni)anibnjc

  后面的 c 先不管,先把这个式子xjb变换一下。
  
i=2nanij=2n(2nijni)bnj  =i=0n2aij=0n2(i+ji)bj

  其实推到这里就可以做了,注意到把组合数拆开了之后是两个指数生成函数的卷积的系数和(差不多这个意思),就可以直接上fft了。
   但是这样太优美了不够暴力
  继续把它推下去吧。
  我们设
fn=i=0naij=0n(i+ji)bj

  那么答案就是 fn2 ,现在考虑怎么搞出个递推式。我们可以把前 n1 项都提出来。
  
fn=fn1+ani=0n1(n+ii)bi+bni=0n1(n+ii)ai+(2nn)anbn

  注意到中间有两个东西是一样的,那么可以继续设
gn(x)=i=0n1(n+ii)xi

  把组合数拆了,继续推吧= =
  
gn(x)=i=0n1((n1+ii)+(n1+ii1))xi  =gn1(x)+(2n2n1)xn1+i=0n2(n+ii)xi+1=gn1(x)+(2n2n1)xn1+xgn(x)(2n1n1)xn

  移一下项,得到
  
gn(x)=(gn1(x)+(2n2n1)xn1(2n1n1)xn)/(1x)

  把 gn(x) 代入 fn ,有
  
fn=fn1+angn(b)+bngn(a)+(2nn)anbn

  好的到这里 gn(x) 就可以 O(n) 算了。。。于是 fn 也可以 O(n) 算了。
  注意一下 gn(0) gn(1) 不用递推,直接算就好。
  于是在 O(n) 内就做完啦。
  代码太丑就不贴了。

你可能感兴趣的:(数学题,组合数学,递推)