HNOI2017 抛硬币 (FakeBeng)

除了队长快跑外最难的题吧。

除了需要写(exLucas)之外,还教会了我大量的卡常技巧。

首先(70)分就是个直接按题意模拟,易得(ans=sum_{j=0}^{b} C_{b}^{j}sum_{i=j+1}^{a}C_{a}^{i}),把后面的求和用后缀和优化一下,外加(exLucas)和大力卡常应该可以拿到这档分。

考虑满分做法,首先对于(a=b)的,显然每一种胜利局面取反后一定是一种失败局面,当然还有平局。

我们考虑用总情况减去平局除以二。

如何计算平局,显然有(sum=sum_{i=0}^{a}C_{a}^{i}*C_{b}^{i}),因为(a=b),所以这式子等于(C_{2a}^{a}),证明很显然。

所以当(a=b)时,(ans=frac{2^{a+b}-C_{2a}^{a}}{2})

现在考虑(a>b)的情况,显然每个失败状态和平局取反后一定是必胜的,但是有些胜利状态取反后还是胜利的。我们考虑计算这一部分。

我们假设小(A)抛了(W_A)次正面,小(B)抛了(W_B)次正面,那么在该情况下有(W_A>W_B),那么(a-W_A>b-W_B),得(a-b>W_A-W_b>0),枚举(W_A-W_B),有(sum_{i=1}^{a-b-1}sum_{j=0}^{b}C_{b}^{j}C_{a}^{i+j}),转换一下得(sum_{i=1}^{a-b-1}sum_{j=0}^{b}C_{b}^{b-j}C_{a}^{i+j}) ,因为(b-j+i+j=b+i),所以(sum_{i=1}^{a-b-1}C_{a+b}^{b+i}),然后就可以算了。(ans=frac{2^{a+b}+sum_{i=1}^{a-b-1}C_{a+b}^{b+i}}{2}) 。然后你就可以算了,还有个卡常,就是这个组合数是对称的,我们可以只算一半。

原文地址:https://www.cnblogs.com/dengyixuan/p/10028254.html