Comet OJ - Contest #2 B 她的想法、他的战斗(概率 + 数学)
题目描述
Takuru 是一名情报强者,所以他想利用他强大的情报搜集能力来当中间商赚差价。
Takuru 的计划是让 Hinae 帮他去市场上买一个商品,然后再以另一个价格卖掉它。Takuru 会给 Hinae 一定的钱 pp。(pp 是一个非负的实数)
这个商品的市场价是一个在 [l, r][l,r] 内均匀随机的实数。
如果 p \geqslantp⩾ 市场价,那么 Hinae 会买下这个商品,然后私吞剩下的钱。也就是说,Takuru 以 pp 的代价买来了这个商品。
如果 p <p< 市场价,那么 Hinae 既不会买下商品,又不会私吞任何钱。也就是说,Takuru 的利润为 00。
当 Hinae 买下了商品后,Takuru 会生成一个在 [L, R][L,R] 内均匀随机的实数 qq,并把商品以 qq 的价格卖掉。那么 Takuru 的利润就是 q - pq−p。
Takuru 想要获得最多的利润,所以你要帮 Takuru 确定给 Hiane 的钱 pp,使得 Takuru 的期望利润最大。请求出最大的期望利润。
输入描述
第一行两个正整数 ll 和 rr (1\leqslant l < r \leqslant 20001⩽l<r⩽2000)。
第二行两个正整数 LL 和 RR (1\leqslant L < R \leqslant 20001⩽L<R⩽2000)。
输出描述
一个实数,表示最大的期望利润。(四舍五入后保留 44 位小数,输出超过 44 位或少于 44位都会获得 Wrong Answer。)
如果答案为 00,请不要输出多余的负号。
若答案为 vv,保证 v+10^{-6}v+10−6 以及 max(v-10^{-6},0)max(v−10−6,0) 四舍五入后保留 44 位小数的结果不会改变。
样例输入 1
400 1200
600 1800
样例输出 1
200.0000
样例输入 2
1999 2000
1 2
样例输出 2
0.0000 思路:
因为主人公的售价是 L~R 所以 主人公售价的期望是 (L+R)/2
我们给买手的钱是p,那么我们主人公的利润就是 ((L+R)/2-p)
我们知道 期望=值*概率
利润期望=利润值*概率 我们来看下概率,
P必须取到 l和r之间,因为如果p大于r,那么不是最优的选择,因为可以选择r可以产生更好的利益。
而p小于l的话,买手会无法购物商品,所以也不可以。
那么p就在 l和r之间了,
买手能买商品的时候当且仅当 商品的市场价 恰好小于等于p,也就是市场价y小于p时,可以购买,
那么y的范围时 l~p,总范围是l~r,所以概率是 (p-l)/(r-l)
期望就是
((L+R)/2-p)*(p-l)/(r-l)
公式就是一个关于p的二次函数,并且a是小于等于0的,有极大值,我们判定对称轴是否在l到r之间,
如果在,那么函数的极值就是答案,如果不在,那么取区间的左右极限的较大值是答案。
注意处理以下0*负数=-0的情况, 细节见code
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define rt return
#define dll(x) scanf("%I64d",&x)
#define xll(x) printf("%I64d\n",x)
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define db(x) cout<<"== [ "<<x<<" ] =="<<endl;
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=;while(b){if(b%)ans=ans*a%MOD;a=a*a%MOD;b/=;}return ans;}
inline void getInt(int* p);
const int maxn=;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
double l,r;
double L,R;
int main()
{
//freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);
//freopen("D:\\common_text\\code_stream\\out.txt","w",stdout); gbtb;
cin>>l>>r;
cin>>L>>R;
double t=(L+R)/2.00;
double k=(r-l);
double a=-1.00/k;
double b=(t+l)/k;
double c=-l*t/k;
double x=-b/(2.00*a);
double ans;
if(x>=l&&x<=r)
{
ans=(*a*c-b*b)/(*a);
// db(a*x*x+b*x+c);
}else
{
ans=a*l*l+b*l+c;
ans=max(ans,a*r*r+b*r+c);
}
ans+=eps;
ans=max(0.0,ans-eps);
cout<<fixed<<setprecision()<<ans<<endl; return ;
} inline void getInt(int* p) {
char ch;
do {
ch = getchar();
} while (ch == ' ' || ch == '\n');
if (ch == '-') {
*p = -(getchar() - '');
while ((ch = getchar()) >= '' && ch <= '') {
*p = *p * - ch + '';
}
}
else {
*p = ch - '';
while ((ch = getchar()) >= '' && ch <= '') {
*p = *p * + ch - '';
}
}
}
Comet OJ - Contest #2 B 她的想法、他的战斗(概率 + 数学)的更多相关文章
- Comet OJ - Contest #2简要题解
Comet OJ - Contest #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/ ...
- Comet OJ - Contest #2 简要题解
Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...
- Comet OJ - Contest #4--前缀和
原题:Comet OJ - Contest #4-B https://www.cometoj.com/contest/39/problem/B?problem_id=1577传送门 一开始就想着暴力打 ...
- Comet OJ - Contest #11 题解&赛后总结
Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...
- Comet OJ - Contest #8
Comet OJ - Contest #8 传送门 A.杀手皇后 签到. Code #include <bits/stdc++.h> using namespace std; typede ...
- Comet OJ - Contest #13-C2
Comet OJ - Contest #13-C2 C2-佛御石之钵 -不碎的意志-」(困难版) 又是一道并查集.最近做过的并查集的题貌似蛮多的. 思路 首先考虑,每次处理矩形只考虑从0变成1的点.这 ...
- Comet OJ - Contest #13 「火鼠的皮衣 -不焦躁的内心-」
来源:Comet OJ - Contest #13 芝士相关: 复平面在信息学奥赛中的应用[雾 其实是道 sb 题??? 发现原式貌似十分可二项式定理,然后发现确实如此 我们把 \(a^i\) 替换成 ...
- Comet OJ - Contest #13 「佛御石之钵 -不碎的意志-」(hard)
来源:Comet OJ - Contest #13 一眼并查集,然后发现这题 tmd 要卡常数的说卧槽... 发现这里又要用并查集跳过访问点,又要用并查集维护联通块,于是开俩并查集分别维护就好了 一开 ...
- Comet OJ - Contest #5
Comet OJ - Contest #5 总有一天,我会拿掉给\(dyj\)的小裙子的. A 显然 \(ans = min(cnt_1/3,cnt_4/2,cnt5)\) B 我们可以感性理解一下, ...
- Comet OJ Contest #13 D
Comet OJ Contest #13 D \(\displaystyle \sum_{i=0}^{\left\lfloor\frac{n}{2}\right\rfloor} a^{i} b^{n- ...
随机推荐
- 图的普里姆(Prim)算法求最小生成树
关于图的最小生成树算法------普里姆算法 首先我们先初始化一张图: 设置两个数据结构来分别代表我们需要存储的数据: lowcost[i]:表示以i为终点的边的最小权值,当lowcost[i]=0说 ...
- React Native商城项目实战01 - 初始化设置
1.创建项目 $ react-native init BuyDemo 2.导入图片资源 安卓:把文件夹放到/android/app/src/main/res/目录下,如图: iOS: Xcode打开工 ...
- Python深度学习读书笔记-6.二分类问题
电影评论分类:二分类问题 加载 IMDB 数据集 from keras.datasets import imdb (train_data, train_labels), (test_data, t ...
- 安装telnet服务
一.安装telnet1.检测telnet-server的rpm包是否安装 [root@localhost ~]# rpm -qa telnet-server 若无输入内容,则表示没有安装.出于安全考虑 ...
- iOS应用将强制使用HTTPS安全加密-afn配置https(190926更新)
WWDC 2016苹果开发者大会上,苹果在讲解全新的iOS10中提到了数据安全这一方面,并且苹果宣布iOS应用将从2017年1月起启用名为App Transport Security的安全传输功能. ...
- 用Vue来实现音乐播放器(三十八):歌词滚动列表的问题
1.频繁切换歌曲时,歌词会跳来跳去 原因: // 歌词跳跃是因为内部有一个currentLyric对像内部有一些功能来完成歌词的跳跃 //每个currentLyric能实现歌曲的播放跳到相应的位置 是 ...
- Openstack 实现技术分解 (3) 开发工具 — VIM & dotfiles
目录 目录 前文列表 扩展阅读 前言 插件管理 Vundle 主题 Solarized 浏览项目目录结构 Nerdtree Symbol 窗口 Tagbar 文件模糊查询 CtrlP 代码补全 You ...
- windows环境下PostgreSQL的安装
1.首先在如下链接下载PostgreSQL的压缩包,我这里下载的是postgresql-12.1-1-windows-x64-binaries.zip. https://www.enterprised ...
- RequestContextHolder
JShop简介:jshop是一套使用Java语言开发的B2C网店系统,致力于为个人和中小企业提供免费.好用的网店系统. 项目主页:http://git.oschina.net/dinguangx/js ...
- CSS3——分组和嵌套 尺寸 display显示 position定位 overflow float浮动
分组和嵌套 分组选择器 ——————> 嵌套选择器 能适用于选择器内部的选择器的样式 p{ }: 为所有 p 元素指定一个样式. .marked{ }: 为所有 class="m ...