http://acm.hdu.edu.cn/showproblem.php?pid=4986

设期望为。此时再加入一个盒子,若盒子中的钥匙可以打开该盒子,则,否则
前者发生的概率是,后者发生的概率是,所以最终,所以此题就是求第个调和数。

(只贴出与题目有关的代码,宏定义见 GitHub

double H(int n) // 误差为1/(252*n^6)
{
    if (n == 1) return 1.0;
    if (n == 2) return 1.5;
    return log((double)n) + 0.57721566490153286060651209 + 1 / (2.0 * n) - 1 / (12.0 * n * n) + 1 / (120.0 * n * n * n * n);
}

int main()
{
    int n;
    while (~SI(n)) printf("%.4f\n", H(n));
    return 0;
}

Comments

comments powered by Disqus