P1291 [SHOI2002]百事世界杯之旅

题目描述

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

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

输入输出格式

输入格式:

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

输出格式:

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

分数必须是不可约的。


我确信洛谷和网上的题解大部分都是错的,少部分是对的的也并没有说清楚。

比如说这个题极限的思想,我没有看到一个提出来的。

首先得明白一点,当已经买到所有的名字以后,是不需要再买的。针对于子问题也这样想。

从两个方面分别具体说说这个题目。

一、对每一步暴力极限求解。

令\(f[i]\)表示已经买到\(i\)个球星的期望购买次数。

我们由\(f[i]\)推\(f[i+1]\)

下一次购买可以买到不同球星的概率是\(\frac{n-i}{n}\)

下两次购买可以买到不同球星的概率是\(\frac{i}{n} \times \frac{n-i}{n}\) 注意到这时第一次买到的情况已经忽略了

...

下\(k\)次购买可以买到不同球星的概率是\((\frac{i}{n})^{k-1} \times \frac{n-i}{n}\)

假设第\(k\)次就是正无穷次

则此步的期望即为

\(E=1 \times \frac{n-i}{n}+2 \times \frac{i}{n} \times \frac{n-i}{n}+3 \times (\frac{i}{n})^2 \times \frac{n-i}{n}+...+k \times (\frac{i}{n})^{k-1} \times \frac{n-i}{n}\)

则有

\(\frac{i}{n} \times E=1 \times \frac{i}{n} \times \frac{n-i}{n}+2 \times (\frac{i}{n})^2 \times \frac{n-i}{n}+3 \times (\frac{i}{n})^3 \times \frac{n-i}{n}+...+k \times (\frac{i}{n})^k \times \frac{n-i}{n}\)

错位相减

\(E\approx 1+\frac{i}{n}+(\frac{i}{n})^2+...(\frac{i}{n})^{k-1}\)

此步中采用极限的思想丢了一些\(0\)的项,用“\(\approx\)”表示采用极限思想,实际上极限是准确值,不需要“\(\approx\)”,此处只是为了标示,下同。

由等比数列公式

\(E=1+\frac{\frac{i}{n}-(\frac{i}{n})^k}{\frac{n-i}{n}}\)

\(\approx \frac{n}{n-i}\)

所以我们得出

\(f[i+1]=f[i]+\frac{n}{n-i}\)

\(f[n]=n \times (\frac{1}{1}+\frac{1}{2}+...+\frac{1}{n})\)

二、神奇的自己推自己的方法

同样令\(f[i]\)表示已经买到\(i\)个球星的期望购买次数。

如果从上一个推过来,为

\(f[i]+=(f[i-1]+1)\times \frac{n-(i-1)}{n}\)

如果从当前推过来,为

\(f[i]+=(f[i]+1)\times \frac{i}{n}\)

发现概率之和并不等于1,也就是说,这样写是有问题的。

从上一个推过来肯定没问题,我们考虑从当前推当前的意义。

“买了一个,买的是自己有的的概率”

然而我们考虑最开始说的一句话

“当已经买到所有的名字以后,是不需要再买的。”

也就是说,我们这样写可能把自己买了很多遍,而事实上是并不需要再买的。

于是我们修改一下意义

为“买了一个,买的是自己有的且不是自己的概率”

则推过来就是

\(f[i]+=(f[i]+1)\times \frac{i-1}{n}\)

那我们这个什么时候买呢?

极限的思想,在最后买时,对期望的影响是微乎其微的

把这两项加起来并化简

就得到了

\(f[i]=f[i-1]+\frac{n}{n-i+1}\)

和上一个方法的结果是一样的

关于合并两个值并不是一样的\(f[i]\),用的也是极限的思想


Code:

#include <cstdio>
#define ll long long
ll gcd(ll a,ll b)
{
return b?gcd(b,a%b):a;
}
int cal(ll a)
{
int cnt=0;
while(a)
cnt++,a/=10;
return cnt;
}
struct node
{
ll p,q;
node(){}
node friend operator +(node n1,node n2)
{
node n3;
n3.p=n1.p*n2.p;
n3.q=n1.p*n2.q+n1.q*n2.p;
ll d=gcd(n3.p,n3.q);
n3.p/=d,n3.q/=d;
return n3;
}
node(int q,int p)
{
this->p=p;
this->q=q;
}
};
int main()
{
ll n;
scanf("%lld",&n);
node f(1,1);
for(int i=2;i<=n;i++)
{
node t(1,i);
f=f+t;
}
f.q*=n;
ll d=gcd(f.q,f.p);
f.p/=d,f.q/=d;
if(f.p==1)
{
printf("%lld\n",f.q);
return 0;
}
ll Int=f.q/f.p;
int len=cal(Int);
for(int i=1;i<=len;i++)
printf(" ");
printf("%lld\n%lld",f.q%f.p,Int);
int len2=cal(f.p);
for(int i=1;i<=len2;i++)
printf("-");
printf("\n");
for(int i=1;i<=len;i++)
printf(" ");
printf("%lld\n",f.p);
return 0;
}

2018.7.27

洛谷 P1291 [SHOI2002]百事世界杯之旅 解题报告的更多相关文章

  1. 洛谷P1291 [SHOI2002]百事世界杯之旅 [数学期望]

    题目传送门 百事世界杯之旅 题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听, ...

  2. 洛谷P1291 [SHOI2002]百事世界杯之旅(期望DP)

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

  3. 洛谷P1291 [SHOI2002]百事世界杯之旅——期望DP

    题目:https://www.luogu.org/problemnew/show/P1291 水水的经典期望DP: 输出有毒.(其实也很简单啦) 代码如下: #include<iostream& ...

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

    题链: https://www.luogu.org/recordnew/show/5861351题解: dp,期望 定义dp[i]表示还剩下i个盖子没收集时,期望还需要多少次才能手机完. 初始值:dp ...

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

    题目链接: kma 题目分析: 收集邮票的弱弱弱弱化版,因为是期望,考虑倒推 设\(f[i]\)表示现在已经买齐了\(i\)种,距离买完它的剩余期望次数 那么下一次抽有\(\frac{i}{n}\)的 ...

  6. 洛谷 1291 [SHOI2002]百事世界杯之旅

    题目:https://www.luogu.org/problemnew/show/P1291 大水题!套路!模板! 稍微注意一下输出就行了. #include<iostream> #inc ...

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

    P1291 [SHOI2002]百事世界杯之旅 设$f(n,k)$表示共n个名字,剩下k个名字未收集到,还需购买饮料的平均次数 则有: $f(n,k)=\frac{n-k}{n}*f(n,k) + \ ...

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

    题目链接 luogu P1291 [SHOI2002]百事世界杯之旅 题解 设\(f[k]\)表示还有\(k\)个球员没有收集到的概率 再买一瓶,买到的概率是\(k/n\),买不到的概率是\((n-k ...

  9. P1291 [SHOI2002]百事世界杯之旅

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

随机推荐

  1. 关于Python的多重排序

    Python预置的list.sort().sorted()方法可实现各种数组的排序,但支持的只限于一个key,如果要多重排序,目前所知的方法只有自定义了. Help on built-in funct ...

  2. VIN码识别:毫秒间99%精准识别

    科技改变生活.几年前,人工智能还仅是一个噱头,现在已逐渐融入我们的工作和生活,代替了一些重复性的.繁杂的人工劳动,在提高工作效率的同时,提升了客户体验. 车架号也叫VIN码,由17位数字和字母混合组成 ...

  3. Javascript打印网页局部的实现方案

    项目中,需要对页面的部分div进行打印,为了保证界面布局不乱,采取了新建iframe的方法. 将需要打印的div放到iframe中,然后调用iframe进行打印,就可以很好的实现局部打印的效果了. 同 ...

  4. .NET中发送邮件的实现

    .NET中发送邮件 注意: 1.引用下列命名空间: using System.Net; using System.Net.Mail; 2.确保你使用的发送邮件的邮箱开启了stamp服务等. /// & ...

  5. Struts2(九.利用layer组件实现图片显示功能)

    1.layer前端组件介绍 layer是一款口碑极佳的web弹层组件,她具备全方位的解决方案,致力于服务各个水平段的开发人员,您的页面会轻松地拥有丰富而友好的操作体验. http://sentsin. ...

  6. Repair the Wall (贪心)

    Long time ago , Kitty lived in a small village. The air was fresh and the scenery was very beautiful ...

  7. 2d命令行小游戏源码

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. (一)Model的产生及处理

    MVC的概念其实最早可以追溯到很久很久以前,并不是WEB开发过程中所首创, 但是,MVC也适合WEB上的开发,并真正的在WEB开发领域广泛应用.MVC的第一个字母M是Model,承载着View层和Co ...

  9. Deeplearning——Logistics回归

    资料来源:1.博客:http://binweber.top/2017/09/12/deep_learning_1/#more——转载,修改更新 2.文章:https://www.qcloud.com/ ...

  10. TCP系列14—重传—4、Karn算法和TSOPT的RTTM

    一.Karn算法 在RTT采样测量过程中,如果一个数据包初传后,RTO超时重传,接着收到这个数据包的ACK报文,那么这个ACK报文是对应初传TCP报文还是对应重传TCP报文呢?这个问题就是retran ...