C. 小妹妹采蘑菇 2014新生暑假个人排位赛11
时间限制 1000 ms
内存限制 65536 KB
题目描述
在广茂的大森林里居住着一位可爱的小妹妹,以及一位怪叔叔。这天,怪叔叔让小妹妹为他做一锅蘑菇汤,可怜的小妹妹只好出门采集蘑菇。怪叔叔知道,森林里一共有n种不同的蘑菇,所以他提出了一个变态的要求,小妹妹必须为他做一锅包含所有n种蘑菇的汤。也就是说,小妹妹至少要采集齐所有的n种蘑菇。她想知道,平均要采多少朵蘑菇能满足怪叔叔的要求,注意,她每次所采的蘑菇是等概率的。
输入格式
多组case,case<=100。每组case一行一个数n,1<=n<=100。输入以EOF结束。
输出格式
每组case输出一行答案,保留六位小数。
输入样例
1
2
输出样例
1.000000
3.000000
赛后AC:YES
思路:
sigema(n/i) (1<=i<=n)
期望的计算方式:
sigema(ki*pi) ki为随机变量,pi为该随机变量对应的概率
期望分为二项分布和几何分布,
二项分布是n次独立重复实验,每次实验都是相互独立的,求的是其中实验成功的次数。直接n*pi就好。
几何分布是n次独立重复实验,每次实验都是相互独立的,求的是第一次成功的实验次数。有无限种可能,但期望收敛,算法是1/pi
这里的就属于几何分布
每一次采摘就是一组实验,
第一次有可能采到不同的蘑菇概率是一,一次成功,不属于几何分布。
第二次采到不同蘑菇的概率是,9/10,而可以采一次,两次,三次...n次踩不到直到第n+1次才采到,所以期望是10/9
下同
ac代码:
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string>
#include <vector>
#include <list>
#include <map>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <numeric>
#include <functional>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
double a=(double)n,b=a;
double sum=0;
for(;b>0;b-=1){
sum+=a/b;
}
printf("%lf\n",sum);
}
return 0;
}