码迷,mamicode.com
首页 > 其他好文 > 详细

P1291 [SHOI2002]百事世界杯之旅

时间:2018-07-29 13:08:26      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:概率   相同   for   ase   span   个数   必须   lis   对齐   

题目描述

“……在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

P1291 [SHOI2002]百事世界杯之旅

标签:概率   相同   for   ase   span   个数   必须   lis   对齐   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!