题目链接:

https://projecteuler.net/problem=389

题意:

掷一个正四面体骰子,记点数为\(T\)。

掷\(T\)个正六面体骰子,记点数和为\(C\)。

掷\(C\)个正八面体骰子,记点数和为\(O\)。

掷\(O\)个正十二面体骰子,记点数和为\(D\)。

掷\(D\)个正二十面体骰子,记点数和为\(I\)。

求\(I\)的方差,并将你的答案四舍五入到\(4\)位小数。

每个面出现的概率等价。

题解:

可能我学了假的概率论和统计方法...以前不知道Bienaymé formula...可能学了也忘了...不过我们可以查 Wiki...QAQ... https://en.wikipedia.org/wiki/Variance

纵所周知,正\(n\)边形的骰子,掷骰子得到的期望点数可以定义为离散随机变量。

比如六面的骰子,每个面\(1\)~\(6\),每个面出现的概率等价。那么期望点数 \(X = \frac{(1 + 2 + 3 + 4 + 5 + 6)}{6} =\frac{7}{2}\)。期望的方差就是 \(Var(X) = \sum_{i=1}^{6}\frac{1}{6}(i-\frac{7}{2})^2 = \frac{35}{12}\)。

拓展一下,对于正\(n\)边形的骰子,每个面\(1\)~\(n\),期望点数\(X\)就是\(X = \frac{1}{n}\sum_{i=1}^{n}i = \frac{n+1}{2}\)。

期望方差就是 \(Var(X) = E(X^2) - (E(X)^2) = \frac{1}{n}\sum_{i=1}^{n}i - (\frac{1}{n}\sum_{i=1}^{n}i)^2 = \frac{(n+1)(2n+1)}{6} -(\frac{n+1}{2})^2 = \frac{n^2 - 1}{12}\)。

最后根据 the Law of Total Variance,即 \(Var(I) = Var(E(I|D)) + E(Var(I|D))] = Var(D)E(d)E(d) +Var(d) E(D)\) 就可以做出来啦。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll; int dice[5] = {4,6,8,12,20}; //https://en.wikipedia.org/wiki/Variance double E(int n)
{
return (n + 1) / 2.0;
}
double Var(int n)
{
return (n * n - 1) / 12.0;
} int main(int argc, char const *argv[]) {
double e = 0.0 , var = 0.0;
double ed = 1.0, varsum = 0;
for(int i = 0; i < 5; i++) {
e = E(dice[i]);
var = Var(dice[i]);
varsum = varsum * e * e + var * ed;
ed = ed * e;
}
printf("%.4f\n", varsum);
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
return 0;
}

Project Euler 389 Platonic Dice (概率)的更多相关文章

  1. [project euler] program 4

    上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...

  2. Python练习题 029:Project Euler 001:3和5的倍数

    开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...

  3. Project Euler 9

    题意:三个正整数a + b + c = 1000,a*a + b*b = c*c.求a*b*c. 解法:可以暴力枚举,但是也有数学方法. 首先,a,b,c中肯定有至少一个为偶数,否则和不可能为以上两个 ...

  4. Project Euler 44: Find the smallest pair of pentagonal numbers whose sum and difference is pentagonal.

    In Problem 42 we dealt with triangular problems, in Problem 44 of Project Euler we deal with pentago ...

  5. project euler 169

    project euler 169 题目链接:https://projecteuler.net/problem=169 参考题解:http://tieba.baidu.com/p/2738022069 ...

  6. 【Project Euler 8】Largest product in a series

    题目要求是: The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × ...

  7. Project Euler 第一题效率分析

    Project Euler: 欧拉计划是一系列挑战数学或者计算机编程问题,解决这些问题需要的不仅仅是数学功底. 启动这一项目的目的在于,为乐于探索的人提供一个钻研其他领域并且学习新知识的平台,将这一平 ...

  8. Python练习题 049:Project Euler 022:姓名分值

    本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 ''' Project Euler: Problem 22: Names sco ...

  9. Python练习题 048:Project Euler 021:10000以内所有亲和数之和

    本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...

随机推荐

  1. POJ 1986 裸的LCA

    思路:搞了一发链剖 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> ...

  2. UVA 12649 Folding Machine 搜索

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  3. 如何建立远程桌面连接(XP、Vista、Win7)

    如何建立远程桌面连接(XP.Vista.Win7) 要求: 1:对方即你要连的机器必须要允许远程桌面连接,操作系统一般是winXP(单用户)和win2003server(多用户),具体设置:右击我的电 ...

  4. 如何批量telnet查看否开放指定端口

    由于机房搬迁,需要重新telnet看看网络是否联通 [weblogic@pays03pre_BankVerify /]$ telnet 172.29.1.159 22Trying 172.29.1.1 ...

  5. wc---计算字数。

    Linux wc命令用于计算字数. 利用wc指令我们可以计算文件的Byte数.字数.或是列数,若不指定文件名称.或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据. 语 ...

  6. hibernate : object references an unsaved transient instance 问题

    save顺序问题---比如学生表和班级表..学生表里有班级ID的外键.一对多的关系. 你save的时候应该先save班级,再save学生..否则学生的外键没有对应的值,引发异常

  7. 【Henu ACM Round#18 D】Looksery Party

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 假设现在每个人收到的信息条数存在cnt里面 那个人猜的条数为target 则如果cnt[i]==target[i] 则我们就让第i个 ...

  8. 【Henu ACM Round#15 C】 A and B and Team Training

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举第一种方法. 剩下的全都个第二种方法. 看看能组成多少个队伍就可以了. [代码] #include <bits/stdc+ ...

  9. [Python] Find available methods and help in REPL

    For example you want to know what methods are available in Python for String, you can do : dir(" ...

  10. awk依照多个分隔符进行切割

    我们知道awk能够进行类似于cut之类的操作.如一个文件data例如以下 zhc-123|zhang hongchangfirst-99|zhang hongchang-100|zhang 假设我们 ...