P5147 随机数生成器 [数列]

Posted garen-wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P5147 随机数生成器 [数列]相关的知识,希望对你有一定的参考价值。

P5147 随机数生成器

数学老师看不懂系列

看题目这一片代码就很晕:

int work(int x)
{
    if(x==1)return 0;
    else return work(rand(1,x))+1;
}

但是如果你把这个东西看成一个数列的值,就很显然了。

work(n)返回的期望值为(a_n),那么题意就可以变成:

[egin{cases} a_1 = 0 \ a_n= frac{S_n}{n} + 1end{cases}]

运用数列的知识,我们就能发现从(a_2)开始的数列就是一个调和级数。

所以我们特判(n=1)的情况,然后其他的就使用调和级数公式。

(n leq 1000000)的情况直接暴力算,(n)巨大的时候就输出(ln{n} + gamma + 1),其中(gamma approx 0.5772156649015328606065120900824024310421)

然后就完事了。

以上是关于P5147 随机数生成器 [数列]的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #538 (Div. 2) E 随机数生成

PTA乙级 (1049 数列的片段和 (20分))

[SDOI2013] 随机数生成器 题解

C++产生随机数

1049. 数列的片段和(20)

1049 数列的片段和 (20 分)