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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GEOTCBRL/article/details/53022967

  才没有在做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)内就做完啦。
  代码太丑就不贴了。

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页