hackerrank infinitum16 E To Infinity and Beyond

题目大意

给定 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) 完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值