【数学期望 && 几何分布 && 大数】FZU - 2278 YYS

Step1 Problem:

求n种类型SSR,至少每样抽到一个的期望天数(抽一次的天数 (n-1)的阶层)。
数据范围:
1<=n<=3000

Step2 Involving algorithms:

数学期望 && 大数

Step3 Ideas:

X表示,至少每样抽到一个的天数的随机变量,求E(X).
Ei:拥有 i-1 张不一样的,在此基础上抽到新牌的所需期望次数。
E(X) = ( E1 + E2 + E3 + … + En ) * one_day.
对于第一张新牌 抽到的概率 n/n
对于第二张新牌 抽到的概率 (n-1)/n
对于第n张新牌 抽到的概率 (n-(n-1))/n = 1/n
…分界线…
对于第n张新牌,抽到的概率设为p, 第k次抽到的概率为 p*(1-p)^(k-1)
我们求 抽到的所需次数的期望(抽到可能需要多少次)
q = 1 - p;
E(x) = p + 2pq + 3pq^2 + 4pq^3 + … + kpq^(k-1)
E(x) = p(1 + 2q + 3q^2 + 4q^3 + … + kq^(k-1))
S = (1 + 2q + 3q^2 + 4q^3 + … + kq^(k-1))
qS = (q + 2q^2 + 3q^3 + 4q^4 + … + (k-1)q^(k-1) + kq^k)
S - qS = 1 + q + q^2 + q^3 + q^4 + … + q^(k-1) - kq^k
S = (1 - q^k)/(1 - q)^2 - k*q^k/(1 - q)
当k无穷大的时候
S = 1 / (1-q)^2
E(x) = 1 / p
对于第一张新牌 抽到的次数期望 1
对于第二张新牌 抽到的次数期望 n/(n-1)
对于第n张新牌 抽到的次数期望 n/1
one_day:抽一次所需的天数
E(X) = 1 * one_day + n/(n-1) * one_day + … + n * one_day;

Step4 Code:

import java.util.*;
import java.math.*;
public class Main
{
	public static void main(String[] args)
	{
		Scanner cin = new Scanner(System.in);
		int T, n;
		T = cin.nextInt();
		for(int Case = 1; Case <= T; Case++)
		{
			n = cin.nextInt();
			BigInteger one_day = BigInteger.valueOf(1);
			for(int i = 1; i <= n - 1; i++)
			{
				one_day = one_day.multiply(BigInteger.valueOf(i));
			}
			BigInteger total_day = BigInteger.valueOf(0);
			for(int i = 1; i <= n; i++)
			{
				total_day = total_day.add(one_day.multiply(BigInteger.valueOf(n)).divide(BigInteger.valueOf(i)));
			}
			System.out.print(total_day);
			System.out.println(".0");
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值