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. Spring学习记录-Java 11运行eureka-server报javax.xml.bind.JAXBContext not present错

    在pom.xml加入依赖就行 <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId&g ...

  2. Python Road

    引子 雁离群兮不知所归,路遥远兮吾将何往   Python Road[第一篇]:Python简介 Python Road[第二篇]:Python基本数据类型 Python Road[第三篇]:Pyth ...

  3. hdu2099整除的尾数(暴力 省赛)

    整除的尾数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. Python 的非正式介绍

    在下面的例子中,通过提示符 (>>> 与 ...) 的出现与否来区分输入和输出:如果你想复现这些例子,当提示符出现后,你必须在提示符后键入例子中的每一个词:不以提示符开头的那些行是解 ...

  5. 深入理解 Vuejs 动画效果

    本文主要归纳在 Vuejs 学习过程中对于 Vuejs 动画效果的各个相关要点.由于本人水平有限,如文中出现错误请多多包涵并指正,感谢.如果需要看更清晰的代码高亮,请跳转至我的个人站点的 深入理解 V ...

  6. LeetCode - 412. Fizz Buzz - ( C++ ) - 解题报告 - to_string

    1.题目大意 Write a program that outputs the string representation of numbers from 1 to n. But for multip ...

  7. HADOOP docker(十):hdfs 结构体系

    1.简介2.namenode和datanode3.The File System Namespace 文件系统命名空间4.Data Replication 数据复制5.Replica Placemen ...

  8. HADOOP docker(二):HDFS 高可用原理

        1.环境简述2.QJM HA简述2.1为什么要做HDFS HA?2.2 HDFS HA的方式2.2 HSFS HA的结构2.3 机器要求3.部署HDFS HA3.1 详细配置3.2 部署HDF ...

  9. Linux GCC编译

    .a 静态库(打包文件 由多个.o文件打包而成) .c 未经过预处理的C源码 .h C头文件 .i 经过预处理的C源码(将头文件内容加载到c文件中) .o 编译之后产生的目标文件 .s 生成的汇编语言 ...

  10. Alpha-2

    前言 失心疯病源2 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 今天完成了那些任务 17:30~21:30 又测试了一些算法和代码,时间不能再拖下去了,要尽快进入代码阶段,决 ...