fzu 2278 YYS [第八届福建省大学生程序设计竞赛 Problem G] [概率]

本文探讨了在概率相同的条件下,收集所有不同卡片所需的平均金币数。通过数学期望的计算方法,采用Java的BigInteger实现大整数运算,解决n不超过3000时的卡片收集问题。
部署运行你感兴趣的模型镜像

点击打开题目


题意: 有n张不同的卡片, 每花费W (W = (n - 1)!)个金币可以抽一次卡片, 每种卡片被抽到的概率都是1/n, 求抽到所有不同的卡片, 花费金币数量的期望值.

 

思路: 假设共有n张卡片, 已经抽到了k张不同的卡片, 则抽第k + 1张未抽到过的卡片的期望次数:

     

所以花费金币的期望:

         

 

所以预处理一下n <= 3000的阶乘, 即可在O(n)时间内求出期望,由于n <= 3000, n! 太大, 所以用Java的BigInteger计算比较方便


import java.math.BigInteger;
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		BigInteger[] b = new BigInteger[4000];
		b[0] = new BigInteger("1");
		for(int i = 1; i < 4000; i++) {
			String d = i + "";
			b[i] = b[i - 1].multiply(new BigInteger(d));
		}
		int t = cin.nextInt();
		while(t-- > 0) {
			int n = cin.nextInt();
			BigInteger ans = new BigInteger("0");
			for(int i = 1; i <= n ; i++) {
				ans = ans.add(b[n].divide(new BigInteger(i + "")));
			}
			
			System.out.print(ans);
			System.out.println(".0");
		}
		cin.close();
	}
}





您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值