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}),代码就咕咕咕了。

  • 相关阅读:
    ASP.NET连接数据库配置文件
    ASP.NET应用程序的文件类型及文件夹列表
    c#配置文件的简单操作
    js加载XML文件
    c#生成动态库并加载
    class和id的区别
    Div和Span的区别
    C#类和对象
    C#表达式和语句
    函数声明提升和变量提升
  • 原文地址:https://www.cnblogs.com/pkh68/p/10581100.html
Copyright © 2011-2022 走看看