zoukankan      html  css  js  c++  java
  • Luogu3726 [AH2017/HNOI2017]抛硬币

    Luogu3726 [AH2017/HNOI2017]抛硬币

    范德蒙德卷积

    这玩意挺鸡肋的,因为你自己也能推出来,我是在做这道题时听说它的。

    [sum_{i=0}^{k}{n choose i}{ m choose k-i}={n+m choose k} ]

    直接考虑组合意义证明即可。

    解析

    还是讲讲这道题怎么做吧。先考虑(a=b)的情况。你会发现对于一种局面,将它所有结果取反后,输赢结果亦会取反,那么(A)获胜的情况便与(B)获胜的情况一一对应,所以情况数为(frac{2^{a+b}-sum_{i=0}^{a}{a choose i}^2}{2}=frac{2^{a+b}-{2a choose a}}{2}),就是上面那个式子的应用。现在看一看(a!=b)的情况,我们只要将取反后(A)赢的情况仍然与(A)赢的情况对应的数量加上去再除以2就行了,假设(A)抛出(x)个正面,(B)抛出(y)个正面,那么有:

    [x gt y ]

    [a-x gt b-y ]

    解之得:(1 leq x-y leq a-b-1),那么上述方案数即为:

    (f(i)=sum_{i=0}^{b}{b choose i}sum_{j=1}^{a-b-1}{a choose i+j})
    (=sum_{j=1}^{a-b-1}sum_{i=0}^{b}{a choose i+j}{b choose b-i})
    (=sum_{j=1}^{a-b-1}{a+b choose b+j}=sum_{i=b+1}^{a-1}{a+b choose j})

    所以答案为(frac{2^{a+b}-{a+b choose b}+f(i)}{2}),代码就咕咕咕了。

  • 相关阅读:
    jQuery过滤器 过滤器
    查询总结
    ado.net
    禅修程序员十诫
    Asp.net中Bind()和Eval()的区别
    什么是好代码?
    12 个有效的提高编程技能的方法
    Visual Studio各种版本之间的转换工具
    程序员的培养
    session和cookie的区别和联系!
  • 原文地址:https://www.cnblogs.com/pkh68/p/10581100.html
Copyright © 2011-2022 走看看