UVa 10288 (期望) Coupons
2014-12-23 16:56
477 查看
题意:
每张彩票上印有一张图案,要集齐n个不同的图案才能获奖。输入n,求要获奖购买彩票张数的期望(假设获得每个图案的概率相同)。
分析:
假设现在已经有k种图案,令s = k/n,得到一个新图案需要t次的概率为:st-1(1-s);
因此,得到一个新图案的期望为(1-s)(1 + 2s + 3s2 + 4s3 +...)
下面求上式中的级数:
令
代码君
每张彩票上印有一张图案,要集齐n个不同的图案才能获奖。输入n,求要获奖购买彩票张数的期望(假设获得每个图案的概率相同)。
分析:
假设现在已经有k种图案,令s = k/n,得到一个新图案需要t次的概率为:st-1(1-s);
因此,得到一个新图案的期望为(1-s)(1 + 2s + 3s2 + 4s3 +...)
下面求上式中的级数:
令
#include <iostream> #include <sstream> #include <cstdio> using namespace std; typedef long long LL; LL gcd(LL a, LL b) { if(b == 0) return a; return gcd(b, a % b); } LL lcm(LL a, LL b) { return a / gcd(a, b) * b; } int LL_length(LL x) { stringstream ss; ss << x; return ss.str().length(); } void print_chars(char c, int n) { for(int i = 0; i < n; ++i) putchar(c); } void output(LL a, LL b, LL c) { if(b == 0) { printf("%lld\n", a); return; } int l = LL_length(a); print_chars(' ', l+1); printf("%lld\n", b); printf("%lld ", a); print_chars('-', LL_length(c)); printf("\n"); print_chars(' ', l+1); printf("%lld\n", c); } int main() { int n; while(scanf("%d", &n) == 1) { if(n == 1) { puts("1"); continue; } LL x = 1, a = n + 1, b = 0, c; for(int i = 2; i <= n-1; ++i) x = lcm(x, i); c = x; x *= n; for(int i = 2; i <= n-1; ++i) b += x / i; a += b / c; LL g = gcd(b, c); b /= g, c /= g; b %= c; output(a, b, c); } return 0; }
代码君
相关文章推荐
- uva 10288 Coupons 数学期望,分数计算表示
- UVA 10288 Coupons 数学期望
- [UVA10288] Coupons && 数学期望
- uva 10288 Coupons 数学期望
- UVA 题目10288 Coupons(期望)
- UVa 10288(Coupons) 数学期望(概率+递推) Java
- UVA 10288 Coupons 彩票 (数学期望)
- Coupons UVA - 10288
- uva 10288 Coupons
- UVA 10288 - Coupons(概率递推)
- uva 10288 Coupons (分数模板)
- UVa10288 - Coupons(避免高精度的优美姿势)
- UVA10288 Coupons
- Uva 10288 Coupons
- UVA10288 Coupons
- UVA10288 Coupons(卡输出神题)
- UVA 10288 - Coupons(概率递推)
- uva 10288 期望求和
- 【ACM刷题录】UVa10288 Coupons
- 【UVA】10288-Coupons(概率)