zoukankan      html  css  js  c++  java
  • 2012 ICPC/ACM 成都现场赛 Candy

    题目来源:

    http://acm.hdu.edu.cn/showproblem.php?pid=4465

    题意:输入m,p;从两个盒子里各有n颗糖,每天取一颗,发现其中
    一个盒子空,求另外一个盒子糖果数的期望。p,1-p为取糖概率;

    分析: 给盒子编号 A,B , 

    设另外一个盒子(为B) 剩  n - k 个 , 则 在过去的 (n + k)次 有 k 次 取到B , 且当前这次取到A 。

    同理 对另外一个盒子为(A) 。

    则 期望的公式为:

    Σ( n - k) * C(n + k , k) * (  (1 - p) ^k  *  p ^(n + 1) + p ^k  * (1 - p)^(n + 1)  )  k = 0 ,1 ... n

    对于 p^n 次方 肯定 爆double , 于是采用 先 log 再exp ,求值。 

    C( n + k , k) = (n + k)! / ( n ! * k !) 

    令 f(n) = n!  ,则 f(n) = f(n - 1) + log(n) 

    log(p ^n) = n log (p) 

    代码如下:

    const int Max_N = 200010 ;
    double f[Max_N] ;
    double loglog(int n , int k){
        return f[n + k] - f[n] - f[k] ;
    }
    int main(){
        int n  , i  , T = 1;
        double p ;
         f[0]= 0 ;
         f[1] = 0 ;
        for(i = 2 ; i < Max_N ; i ++)
            f[i] = f[i -1] + log(1.0 * i) ;
        while(scanf("%d%lf" , &n ,&p) != EOF){
            double ans = 0.0 ;
            double p1 = log(p) ;
            double p2 = log(1 - p) ;
            for(i = 0 ; i <= n ; i++){
                ans += (n - i) * exp(loglog(n , i) + i * p2 + (n + 1) * p1) ;
                ans += (n - i) * exp(loglog(n , i) + i * p1 + (n+1) * p2) ;
            }
            printf("Case %d: %.6lf
    " , T ++ , ans) ;
        }
        return 0 ;
    }
  • 相关阅读:
    Kubernetes 架构(上)【转】
    部署 k8s Cluster(下)【转】
    部署 k8s Cluster(上)[转]
    k8s 重要概念[转]
    k8s 核心功能[转]
    5 秒创建 k8s 集群[转]
    内置函数——format
    基础数据类型(set集合)
    Oracle 传参错误
    .NET参数化Oracle查询参数
  • 原文地址:https://www.cnblogs.com/zn505119020/p/3748103.html
Copyright © 2011-2022 走看看