hackerrank infinitum16 E To Infinity and Beyond

来源:互联网 发布:socket作用 java 知乎 编辑:程序博客网 时间:2024/06/05 18:58

题目大意

给定A,B,C,求出

a=0Ab=0B(a+ba)x=1min(Aa,Bb,C)(Aa1x1)(Bb1x1)(C1x1)

答案对109+7取模。

A×B1012,C1012

题解

我们把A,B,C先减1。
先声明一个重要的公式:

i=0n(ix)(niy)=(n+1x+y+1)

具体的证明可以通过生成函数1(1x)k的乘积来证。
接下来就可以推公式了:
=x=0up(Cx)a=0A(ax)b=0B(bx)(A+BabAa)=x=0up(Cx)a=0A(ax)(A+Ba+1Aa+x+1)=x=0up(Cx)a=0A(ax)(A+Ba+1Bx)=x=0up(Cx)a=0A+B+1(ax)(A+Ba+1Bx)a=A+1A+B+1(ax)(A+Ba+1Aa+x+1)=x=0up(Cx)((A+B+2B+1)a=0B(a+A+1x)(Baxa))=(x=0up(Cx)(A+B+2B+1))(x=0up(Cx)a=0B(a+A+1x)(Baxa))=(x=0up(Cx)(A+B+2B+1))(x=0up(Cx)i=0x(A+1i)b=0B(bxi)(BbBx))=(x=0up(Cx)(A+B+2B+1))(x=0up(Cx)i=0x(A+1i)(B+1Bi+1))=(x=0up(Cx)(A+B+2B+1))(i=0up(A+1i)(B+1Bi+1)x=iup(Cx))

因为A×B1012,因此up106,我们只需要预处理出一个后缀和,然后组合数边扫边算,这道题就可以O(A×B)完成了。

0 0
原创粉丝点击