zoukankan      html  css  js  c++  java
  • 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}) 。然后你就可以算了,还有个卡常,就是这个组合数是对称的,我们可以只算一半。

  • 相关阅读:
    文档注释
    配置环境变量
    Java编译-->运行
    DOS命令(日后补充)
    字符、字符串函数
    输入字符串,逆序输出
    求矩阵最大元素值,以及行号和列号
    Apache和Tomcat的区别
    C# params关键字
    JSP的隐式对象(session)
  • 原文地址:https://www.cnblogs.com/dengyixuan/p/10028254.html
Copyright © 2011-2022 走看看