题解:P13800 [SWERC 2023] Throwing dice
闲聊
~~要是想预测 2022 年卡塔尔世界杯决赛阿根廷和法国的点球大战,应该怎么分配骰子啊?
别的不说,光门神大马丁的实力就能给阿根廷加个 6 点的骰子。~~
期望值
期望值:在一个离散性随机变量试验中每次可能结果的概率乘以其结果的总和。
换句话说,期望值是随机试验在同样的机会下重复多次的结果计算出的等同“期望”的平均值。
还是不懂?我也不懂!举个例子。
例如,A 与 B 游戏,A 有
虽然 A 更有概率获胜,但 A 每次游戏赚到的钱的期望值是
期望值可以帮助我们反应整体的随机情况,也可以应用到本题中。
应用
- 如果 Alice 的所有骰子的点数的期望值更大,那么 Alice 获胜概率更大;
- 反之,如果 Bob 更大,那么 Bob 获胜概率更大;
- 最后,如果他们所有骰子的期望值相等,那么概率相等。
细节
需要注意的是,虽然无论怎么掷骰子都不会得到小数,但是期望值可能是小数(比如
所以判断相等时最好不要直接写 ==,而是另写一个判断误差不超过某个特定值即为相等的函数。
代码
#include<bits/stdc++.h>
using namespace std;
// 判断相等
bool equal(double x, double y){
return fabs(x-y) <= 1e-4;
}
int main(){
int n, m; cin >> n >> m;
// 计算期望值
double pa = 0, pb = 0;
while(n--){
int x; cin >> x;
pa += (x + 1) / 2.0;
}
while(m--){
int y; cin >> y;
pb += (y + 1) / 2.0;
}
// 分情况
if(equal(pa, pb)) cout << "TIED";
else if(pa > pb) cout << "ALICE";
else cout << "BOB";
}