废话
这个题,我估计 22 22 22 年的时候写过一次,当时应该是搞明白了,现在重新写还是不会写,有点无奈
题目
问题 E: 世界杯:现在的 OJ
把题目加到一个活动里面去之后,感觉之后这个链接就访问不了了。题目编号是
1405
1405
1405 .
题目描述
世界杯来了!!!自然,足球博彩也变得炙手可热。现在有"家博彩公司针对比赛的胜负平给出不同的赔率(比如,赔率为 1 1 1 赔 1.5 1.5 1.5,即如果下注 1 1 1 块钱,猜对了会获得 1.5 1.5 1.5 元,盈利 0.5 0.5 0.5 元),请问是否有一种策略可以保证一定赢钱?
做题思路
直观上比较好理解赔率这个东西,但是,感觉还是差点东西,所以我去网上找了一些背景知识。如何通俗易懂地解释赔率?,这个题目里面的赔率准确来说是这些回答里面的小数赔率。
欧式赔率(也叫做欧洲赔率,或者标准小数赔率),主要在欧洲大陆、澳大利亚和加拿大使用。欧式赔率采用一个简单的小数数字来表示某一投注的可能收益(包含本金在内)。使用欧式赔率来计算可能获取的收益非常简单,只需用你想投注的金额乘以小数赔率即可(需要注意的就是所得的收益数值中包含你投注的本金)。
我这次写的时候其实是非常直观地去写的,就是我忽略了,其实赔率其实和概率是挂钩的,我以为不知道每一个情况(胜,平,负三种情况)要投的钱是未知的,我把它们需要投的钱为 x x x , y y y , z z z ,把三种情况的最大的赔率记为 w 1 w1 w1 , d 1 d1 d1 , l 1 l1 l1 ,
这样子,三个未知数,三个不等式,我想这该咋做?数学功底有限,不知道咋整。
这个回答感觉是讲的最清楚的,就是说,每一家公司的赔率的倒数表示的是,该公司认为该种情况发生的概率,但是这个倒数的和会大于
1
1
1 ,大于
1
1
1 ,大于
1
1
1 的部分表示的是该家公司赚的钱。那我用题目给的数据来验算一下这个结论。
第一家公司,
1.3
,
4.8
,
10.5
1.3,4.8,10.5
1.3,4.8,10.5 ,算出来的概率的和是
1
1.3
+
1
4.8
+
1
10.5
=
0.769
+
0.208
+
0.095
=
1.072
\frac{1}{1.3}+\frac{1}{4.8}+\frac{1}{10.5}=0.769+0.208+0.095=1.072
1.31+4.81+10.51=0.769+0.208+0.095=1.072, 确实比
1
1
1 要大一点。题目问是否存在必赢的策略,意思其实是问能不能通过选择不同的公司,使得 这个倒数(博彩公司认为的事件发生的概率) 的和小于
1
1
1 ,详细地说,就是,我们选一个公司去投,不存在必赢的策略,或者说是必输的,因为公司的抽成,一定是所有玩家提供的本金里面的钱。必须要选择不同的公司,使得三种情况的概率之和比
1
1
1 小
总结:
1.贪心策略选出每一种情况的最大的赔率;
2.求倒数的和
#include<stdio.h>
int main(){
int t;
scanf("%d",&t);
while(t--){
//公司数目
int n;
scanf("%d",&n);
//初始化三种情况最大的赔率
double w1=1,d1=1,l1=1;
while(n--){
double w,d,l;
scanf("%lf %lf %lf",&w,&d,&l);
//贪心策略
if(w>=w1){
w1=w;
}
if(d>=d1){
d1=d;
}
if(l>=l1){
l1=l;
}
}
double sum=1/w1+1/d1+1/l1;
if(sum<1){
printf("Yes\n");
}else{
printf("No\n");
}
}
return 0;
}