P1291 [SHOI2002]百事世界杯之旅

题目描述

“……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯。还不赶快行动!”

你关上电视,心想:假设有n个不同的球星名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所有的名字呢?

输入输出格式

输入格式:

整数n(2≤n≤33),表示不同球星名字的个数。

输出格式:

输出凑齐所有的名字平均需要买的饮料瓶数。如果是一个整数,则直接输出,否则应该直接按照分数格式输出,例如五又二十分之三应该输出为(复制到记事本):
53205 \frac{3}{20}5203?
第一行是分数部分的分子,第二行首先是整数部分,然后是由减号组成的分数线,第三行是分母。减号的个数应等于分母的为数。分子和分母的首位都与第一个减号对齐。

分数必须是不可约的。

输入输出样例

输入样例#1:

2

输出样例#1:

3

Solution:

  本题实际上求得就是收集到$n$个不同瓶子的期望买的瓶子个数。

  假设有$n$个瓶子,那么第一次买$1$个,一定能买到一个没有收集过的类型; 而第二次再买$1$个,有$\frac{n-1}{n}$的概率买到与第一次不同类型的,所以要买到一个与第一次不同类型的瓶子期望次数为$\frac{n}{n-1}$; 第三次买到与之前不同类型的瓶子期望次数就是$\frac{n}{n-2}$……以此类推,可知买到$n$个不同类型的瓶子的期望买的次数为$\sum\limits_{i=1}^{i\leq n}{\frac{n}{i}}$,那么最后只要模拟一下通分的过程就好了。

代码:

 1 #include<bits/stdc++.h>
 2 #define il inline
 3 #define ll long long
 4 #define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
 5 #define Bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--)
 6 using namespace std;
 7 ll n;
 8 ll top,bot=1,p,q,x,y;
 9
10 il ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
11
12 il ll num(ll x){ll tot=0;while(x)tot++,x/=10;return tot;}
13
14 int main(){
15     ios::sync_with_stdio(0);
16     cin>>n;top=n;
17     For(i,2,n) x=i,y=n,p=gcd(x,y),x/=p,y/=p,top=top*x+bot*y,bot*=x,p=gcd(top,bot),top/=p,bot/=p;
18     if(top%bot==0)printf("%lld",top/=bot);
19     else{
20         p=num(bot),q=num(top/bot);
21         For(i,1,q)printf(" ");
22         printf("%lld\n%lld",top%bot,top/bot);
23         while(p--)printf("-");printf("\n");
24         For(i,1,q)printf(" ");printf("%lld",bot);
25     }
26     return 0;
27 }

sdsadsadsadsads

sdaadassa题目描述

“……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯。还不赶快行动!”

你关上电视,心想:假设有n个不同的球星名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所有的名字呢?

输入输出格式

输入格式:

整数n(2≤n≤33),表示不同球星名字的个数。

输出格式:

输出凑齐所有的名字平均需要买的饮料瓶数。如果是一个整数,则直接输出,否则应该直接按照分数格式输出,例如五又二十分之三应该输出为(复制到记事本):
53205 \frac{3}{20}5203?
第一行是分数部分的分子,第二行首先是整数部分,然后是由减号组成的分数线,第三行是分母。减号的个数应等于分母的为数。分子和分母的首位都与第一个减号对齐。

分数必须是不可约的。

输入输出样例

输入样例#1:
复制

2

输出样例#1: 复制

3

原文地址:https://www.cnblogs.com/five20/p/9384687.html

时间: 2024-10-11 15:39:15

P1291 [SHOI2002]百事世界杯之旅的相关文章

luogu P1291 [SHOI2002]百事世界杯之旅

题目链接 luogu P1291 [SHOI2002]百事世界杯之旅 题解 设\(f[k]\)表示还有\(k\)个球员没有收集到的概率 再买一瓶,买到的概率是\(k/n\),买不到的概率是\((n-k) /k\) 那么\(f[k] = f[k]*(n-k)/n + f[k-1]*k/n + 1\) 移向一下\(f[k] = f[k-1] + n/k\) 代码 #include<cstdio> #include<cstring> #include<algorithm> i

P1291 [SHOI2002]百事世界杯之旅(概率)

P1291 [SHOI2002]百事世界杯之旅 设$f(n,k)$表示共n个名字,剩下k个名字未收集到,还需购买饮料的平均次数 则有: $f(n,k)=\frac{n-k}{n}*f(n,k) + \frac{k}{n}*f(n,k+1) +1$ 移项整理,可得: $f(n,k)=f(n,k+1)+\frac{n}{k}$ 根据递推式,可得: $f(n,0)=n\sum_{k=1}^{n}\frac{1}{k}$ 蓝后gcd搞搞约分 注意输出 end. #include<iostream> #

●洛谷P1291 [SHOI2002]百事世界杯之旅

题链: https://www.luogu.org/recordnew/show/5861351题解: dp,期望 定义dp[i]表示还剩下i个盖子没收集时,期望还需要多少次才能手机完. 初始值:dp[0]=0 显然对于一个状态,我们随机得到一个盖子,有两种可能: 1.得到了曾经没有的盖子,概率为i/N,并转移到dp[i-1]. 2.得到了已经有了的盖子,概率为(N-i)/N,并转移到dp[i]. 所以dp转移式: dp[i]=(i/n)*dp[i-1]+((N-i)/i)*dp[i]+1(加一

COGS 1224. [SHOI2002]百事世界杯之旅(期望概率)

COGS 1224. [SHOI2002]百事世界杯之旅 ★   输入文件:pepsi.in   输出文件:pepsi.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯.还不赶快行动!” 你关上电视,心想:假设有n个不同的球星名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所

SHOI2002 百事世界杯之旅

题目链接:戳我 看到期望,想着不要从前转移. 一次后能买到不同种类的概率为\(\frac{n-i}{n}\) 两次后能买到不同种类的概率为\(\frac{i}{n}\times \frac{n-i}{n}\) n次后能买到不同种类的概率为\((\frac{i}{n})^n\times \frac{n-i}{n}\) 设总期望为\(E=\frac{n-i}{n}\times1+\frac{i}{n}\times \frac{n-i}{n}\times 2+(\frac{i}{n})^2\times

[洛谷P1291]百事世界杯之旅

题目大意:有一种饮料,瓶盖上有n个球星的名字,买一瓶饮料出现每个名字的概率相同,求平均需要买几瓶饮料才能凑齐所有的名字. 解题思路:这是一道求数学期望的题目.设当前有$x$个名字,那么使名字变为$x+1$个名字平均需要买$n×\frac{1}{n-x}$瓶. 于是要求的就是$n(\frac{1}{1}+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n})$. 然后就是奇怪的输出了. C++ Code: #include<cstdio> #include<cma

SHOI 2002 百事世界杯之旅 | 概率论

题目:SHOI 2002 若当前已经有了 x 种,再买一个买到不一样的概率为 (n-x)/n,要使这个概率变成 1,则至少再买 n/(n-x) 瓶. 1 #include <cstdio> 2 #include <string> 3 4 long long max(long long x, long long y) { 5 return y < x ? x : y; 6 } 7 8 long long gcd(long long x, long long y) { 9 ret

意大利的世界杯之旅结束了,你的编程之路才刚刚开始……

意大利无缘2018年俄罗斯世界杯!!! 上一次意大利无缘世界杯是什么时候???遥远的1958年!!! 整整60年,蓝色的意大利战袍从来没有过不出现在世界杯赛场上的时刻…… 对于很多的70后.80后.90后来说,意大利伴随着我们走过青春.走向中年,而现在,意大利的青春逝去了…… 而我们则要迎接即将到来的人工智能时代!!!拿什么迎接,用什么迎接,靠什么迎接…… 当然是编程!!! 几乎所有的大佬都在提人工智能,提AI,比尔盖茨.李彦宏.李开复等等  等等…… 我们能做点什么呢?我们可以做的太多了,但最

某县百姓百事110便民服务管理系统(1)——项目总结

项目总结 我是研二的一名学生,一直学习嵌入式方面的知识,C语言用的最多.以前本人未接触过web开发,这是第一次进行web开发,也是第一次学习.学习时间也就一个星期,看了<java编程思想>.<Servlet与JSP核心编程>.<http协议详解>,还未学习设计模式.框架方面的知识,关于js.css,随用随查就可以了. 因为我实习的公司是做国产芯片的,这个项目只是个试点项目(当然也是某县的真实应用系统),为了测试公司刚设计的服务器的性能.而且,经过测试,在应用框架的应用系