HDU 4465 Candy(概率)
2015-08-28 17:32
441 查看
Problem Description
LazyChild is a lazy child who likes candy very much. Despite being very young, he has two large candy boxes, each contains n candies initially. Everyday he chooses one box and open it. He chooses the first box with probability p and the second box with probability
(1 - p). For the chosen box, if there are still candies in it, he eats one of them; otherwise, he will be sad and then open the other box.
He has been eating one candy a day for several days. But one day, when opening a box, he finds no candy left. Before opening the other box, he wants to know the expected number of candies left in the other box. Can you help him?
Input
There are several test cases.
For each test case, there is a single line containing an integer n (1 ≤ n ≤ 2 × 105) and a real number p (0 ≤ p ≤ 1, with 6 digits after the decimal).
Input is terminated by EOF.
Output
For each test case, output one line “Case X: Y” where X is the test case number (starting from 1) and Y is a real number indicating the desired answer.
Any answer with an absolute error less than or equal to 10-4 would be accepted.
Sample Input
Sample Output
Source
2012 Asia Chengdu Regional Contest
分析:枚举还剩i个A(B)钟即可,这种题见得少,其实就是概率论里练习题的水平,
但是要组合数,注意到n达1e5,无法胜任,还是要取log
LazyChild is a lazy child who likes candy very much. Despite being very young, he has two large candy boxes, each contains n candies initially. Everyday he chooses one box and open it. He chooses the first box with probability p and the second box with probability
(1 - p). For the chosen box, if there are still candies in it, he eats one of them; otherwise, he will be sad and then open the other box.
He has been eating one candy a day for several days. But one day, when opening a box, he finds no candy left. Before opening the other box, he wants to know the expected number of candies left in the other box. Can you help him?
Input
There are several test cases.
For each test case, there is a single line containing an integer n (1 ≤ n ≤ 2 × 105) and a real number p (0 ≤ p ≤ 1, with 6 digits after the decimal).
Input is terminated by EOF.
Output
For each test case, output one line “Case X: Y” where X is the test case number (starting from 1) and Y is a real number indicating the desired answer.
Any answer with an absolute error less than or equal to 10-4 would be accepted.
Sample Input
10 0.400000 100 0.500000 124 0.432650 325 0.325100 532 0.487520 2276 0.720000
Sample Output
Case 1: 3.528175 Case 2: 10.326044 Case 3: 28.861945 Case 4: 167.965476 Case 5: 32.601816 Case 6: 1390.500000
Source
2012 Asia Chengdu Regional Contest
分析:枚举还剩i个A(B)钟即可,这种题见得少,其实就是概率论里练习题的水平,
但是要组合数,注意到n达1e5,无法胜任,还是要取log
#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<string> #include<iostream> #include<queue> #include<cmath> #include<map> #include<stack> #include<set> using namespace std; #define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i ) #define REP( i , n ) for ( int i = 0 ; i < n ; ++ i ) #define CLEAR( a , x ) memset ( a , x , sizeof a ) const int INF=0x3f3f3f3f; typedef long long LL; const int maxn=(1e5+100)*2; int n; double p; double f[maxn*2+100]; int main() { f[0]=0; for(int i=1;i<=maxn*2;i++) f[i]=f[i-1]+log(1.0*i); int cas=1; while(~scanf("%d%lf",&n,&p)) { double sum=0.0; for(int i=1;i<=n;i++)//枚举还剩i个 { double A=(f[2*n-i]-f[n-i]-f )+(n-i)*log(p)+(n+1)*log(1-p); double B=(f[2*n-i]-f[n-i]-f )+(n-i)*log(1-p)+(n+1)*log(p); sum+=(exp(A)+exp(B))*i; } printf("Case %d: %.6f\n",cas++,sum); } return 0; }
相关文章推荐
- iOS中绘制圆形的函数方法
- Java中的匿名对象
- UIView的layoutSubviews和drawRect方法何时调用
- Dynamics AX R2 业务系列-采购业务流程
- 敏捷软件开发:原则、模式与实践——第14章 使用UML
- 结构体,共用体和枚举类型的区别
- InstaMaterial - eclipse 版(学习总结)
- Spring 整合 Redis
- 【OpenCV学习笔记】一.操作像素
- Laravel对路由的的实现过程
- 随机输入十个数,采用直接插入进行排序
- Tomcat的配置文件 -- server.xml(二)
- UIPageControl
- js字符串的各种格式的转换 ToString,Format
- 图像矩的概念
- Android的安全机制和su概述
- 算法理解——求连续子向量的最大和
- 自己理解canvas里面的beginPath();closePath();save();restore();
- ASP实现上传图片自动 压缩图片大小 留存待修改
- 心得:做任何事情,都是在与三样东西赛跑(时间成本、经济成本、竞争对手)