题意:Takuru 是一名情报强者,所以他想利用他强大的情报搜集能力来当中间商赚差价。Takuru 的计划是让 Hinae 帮他去市场上买一个商品,然后再以另一个价格卖掉它。Takuru 会给 Hinae 一定的钱 pp。(pp 是一个非负的实数)这个商品的市场价是一个在 [l,r][l, r] 内均匀随机的实数。如果 pp \geqslant 市场价,那么 Hinae 会买下这个商品,然后私吞剩下的钱。也就是说,Takuru 以 pp 的代价买来了这个商品。如果 p<p < 市场价,那么 Hinae 既不会买下商品,又不会私吞任何钱。也就是说,Takuru 的利润为 00。当 Hinae 买下了商品后,Takuru 会生成一个在 [L,R][L, R] 内均匀随机的实数 qq,并把商品以 qq 的价格卖掉。那么 Takuru 的利润就是 qpq - p。Takuru 想要获得最多的利润,所以你要帮 Takuru 确定给 Hiane 的钱 pp,使得 Takuru 的期望利润最大。请求出最大的期望利润。

一道典型的数学期望题,但是比较简单。

由题知,售价的期望值应该是一个定值,即 L+R2\frac{L+R}{2},重点在给的钱 pp 的值。

可以知道买到商品的概率应该为 plrl\frac{p-l}{r-l},我们先把期望利润用带有 pp 的代数式表示出来,即:

plrl×(L+R2p) \frac{p-l}{r-l}\times(\frac{L+R}{2}-p)

很明显,pp 应该在 [l,r][l,r] 之间时最优,如果 p<lp<l,那么买不起商品,利润一定为 00,如果 pp 大于 rr ,则成本过高,不如 p=rp=r 时划算,所以 pp 的取值范围应该为 [l,r][l,r]

可以发现上面那个代数式是关于 pp 的一个二次函数,我们直接分类讨论,如果对称轴在 [l,r][l,r] 内,那么最大利润就是 pp 取对称轴时,否则要么利润为 00 (p=lp=l),要么利润为 L+R2r\frac{L+R}{2}-r (p=rp=r),两者取最大值即可。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
int l,r,L,R;
double p,q,x,ans;
int main()
{
	scanf("%d%d%d%d",&l,&r,&L,&R);
	q=(R+L)/2.0;
	x=(q+l)/2.0;
	if(x>=l&&x<=r)
		ans=(x-l)*(q-x)/(r-l);
	else
		ans=max(0.0,(double)q-r);
	printf("%.4lf",ans);
	return 0;
}