zoukankan      html  css  js  c++  java
  • 百度之星2020复赛-E Battle for Wosneth2

    链接

    一道简单的推式子题

    首先,发现直接计算Ailce获胜的概率需要讨论最后一刀的情况,有点复杂。

    正难则反,我们计算Bob获胜的概率

    Bob获胜的条件显然是:

    某一轮结束后,Alice血量为0,且Bob血量大于0

    然后考虑一轮的情况,发现如果两人都没有命中的话,这轮显然是没用的,于是一轮只有如下3种情况(设(tot=1-(1-p)(1-q))):

    1.Bob扣了一滴血,概率为(p1=frac{p(1-q)}{tot})

    2.Alice扣了一滴血,概率为(p2=frac{(1-p)q}{tot})

    3.两人都扣了一滴血,概率为(p3=frac{pcdot q}{tot})

    先考虑(n^2)的写法。

    我们枚举结束的轮数(G)和两人都扣一滴血的局数(i),那么有(G-n)轮Bob扣了一滴血,(n-i)轮Ailce扣了一滴血,(i)轮两人都扣了一滴血。

    要注意的是Bob得在最后一轮受到一次伤害,因此我们先枚举最后一轮的情况。

    推出答案

    [Ans=sum_{G=n}^{m+n-1}sum_{i=0}^{min{m+n-G-1,n}}p1^{G-n}cdot p2^{n-i}cdot p3^{i} imes left( inom{G-1}{i}cdot inom{G-1-i}{n-i-1}+inom{G-1}{i-1}cdot inom{G-i}{n-i} ight) ]

    考虑优化,我们把组合数拆开,得到:

    [Ans=sum_{G=n}^{m+n-1}sum_{i=0}^{min{m+n-G-1,n}}p1^{G-n}cdot p2^{n-i}cdot p3^{i} imes left( frac{(G-1)!}{i!(G-1-i)!}cdotfrac{(G-1-i)!}{(n-i-1)!(G-n)!}+frac{(G-1)!}{(i-1)!(G-i)!}cdot frac{(G-i)!}{(n-i)!(G-n)!} ight)\ =sum_{G=n}^{m+n-1}sum_{i=0}^{min{m+n-G-1,n}}p1^{G-n}cdot p2^{n-i}cdot p3^{i} imes left( frac{(G-1)!}{i!(n-i-1)!(G-n)!}+frac{(G-1)!}{(i-1)!(n-i)!(G-n)!} ight)\ =sum_{G=n}^{m+n-1}p1^{G-n}cdot frac{(G-1)!}{(G-n)!} sum_{i=0}^{min{m+n-G-1,n}}p2^{n-i}cdot p3^icdotleft(frac{1}{i!(n-i-1)!}+frac{1}{(i-1)!(n-i)!} ight) \ ]

    发现右边这部分有关(i)的可以前缀和预处理出来,因此直接(O(n))递推就OK了。

  • 相关阅读:
    Spring Boot 打包插件,真是太有用了!
    java高级应用:线程池全面解析
    漫画:HTTP 协议极简教程,傻瓜都能看懂!
    Tomcat 连接数与线程池详解
    Intellij IDEA Debug 调试技巧
    Java 程序员必须掌握的 5 个注解!
    如何优雅地终止一个线程?
    springmvc实现REST中的GET、POST、PUT和DELETE
    @Resource 和 @Autowired注解的异同
    SpringMVC的各种参数绑定方式
  • 原文地址:https://www.cnblogs.com/SillyTieT/p/13493022.html
Copyright © 2011-2022 走看看