洛谷P5155 [USACO18DEC]Balance Beam(期望,凸包)
你以为它是一个期望dp,其实它是一个凸包哒!
设平衡木长度为\(L\),把向右走平衡木那个式子写一下:
\[dp[i]=\frac{dp[i+1]+dp[i-1]}{2}\]
然后会发现这是一个等差数列,显然有\(dp[0]=0,dp[L]=1\)
所以\(dp_{i\rightarrow L}=\frac{i}{L}\)
向左走同理:\(dp_{i\rightarrow 1}=\frac{L-i}{L}\)
令停止点为直接从这个点跳下去能得到期望报酬最高的点,设点\(i\)左右两端的停止点分别为\(l\)和\(r\)
则贡献\(f_i=a_l*\frac{r-i}{r-l}+a_r*\frac{i-l}{r-l}\),可以看成是\((l,a_l),(r,a_r)\)组成的线段与直线\(x=i\)的纵坐标
思考一下会发现所有停止点构成一个上凸包
式子写错调了我好久QAQ
代码:
#include <bits/stdc++.h>
#define N 100010
#define ll long long
#define db double
#define int long long
using namespace std;
int s[N],l[N],r[N];ll a[N];
bool pd(int x,int y,int z){ return (a[y]-a[x])*(z-y)<(a[z]-a[y])*(y-x); }
bool vis[N];
const ll bs=1e5;
main(){
int n,i,top=0,j;
scanf("%lld",&n);
for(i=1;i<=n;++i) scanf("%lld",&a[i]);
s[++top]=0;
for(i=1;i<=n+1;++i){
while(top>1 && pd(s[top-1],s[top],i)) top--;
s[++top]=i;
}
for(i=1;i<=n;++i) a[i]*=bs;
for(i=1;i<top;++i){
l[s[i]]=r[s[i]]=s[i];
for(j=s[i]+1;j<s[i+1] && j<=n;++j)
l[j]=s[i],r[j]=s[i+1];
}
for(int i=1;i<=n;++i){
if(l[i]==r[i])printf("%lld\n",a[i]);
else printf("%lld\n",(a[l[i]]*(r[i]-i)+a[r[i]]*(i-l[i]))/(r[i]-l[i]));
}
}
洛谷P5155 [USACO18DEC]Balance Beam(期望,凸包)的更多相关文章
- p5155 [USACO18DEC]Balance Beam
传送门 分析 https://www.luogu.org/blog/22112/solution-p5155 代码 #include<bits/stdc++.h> using namesp ...
- 题解-洛谷P4724 【模板】三维凸包
洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...
- Luogu5155 [USACO18DEC]Balance Beam
题目链接:洛谷 这道题看起来是个期望题,但是其实是一道计算几何(这种题太妙了) 首先有一个很好的结论,在一个长度为$L$的数轴上,每次从$x$处出发,不停地走,有$\frac{x}{L}$的概率从右端 ...
- 题解-USACO18DEC Balance Beam详细证明
(翻了翻其他的题解,觉得它们没讲清楚这个策略的正确性) Problem 洛谷5155 题意概要:给定一个长为\(n\)的序列,可以选择以\(\frac 12\)的概率进行左右移动,也可以结束并得到当前 ...
- Luogu5155 USACO18DEC Balance Beam(概率期望+凸包)
假设已经求出了在每个点的最优期望收益,显然最优策略是仅当移动一次后的期望收益>当前点收益时移动.对于初始点,其两边各存在一个最近的不满足上述条件的位置,因此从初始点开始随机游走,直到移动到这两个 ...
- [USACO18DEC]Balance Beam
题目链接:这里 或者这里 答案是很显然的,记\(g(i)\)为在\(i\)下平衡木时的期望收益 那么\(g(i)=max(f(i),\frac{g(i-1)+g(i+1)}{2})\) 好了做完了 T ...
- 题解 [USACO18DEC]Balance Beam
被概率冲昏的头脑~~~ 我们先将样例在图上画下来: 会发现,最大收益是: 看出什么了吗? 这不就是凸包吗? 跑一遍凸包就好了呀,这些点中,如果i号点是凸包上的点,那么它的ans就是自己(第二个点),不 ...
- 洛谷P4561 [JXOI2018]排序问题(二分 期望)
题意 题目链接 Sol 首先一种方案的期望等于它一次排好的概率的倒数. 一次排好的概率是个数数题,他等于一次排好的方案除以总方案,也就是\(\frac{\prod cnt_{a_i}!}{(n+m)! ...
- 洛谷P1850 换教室 [noip2016] 期望dp
正解:期望dp 解题报告: 哇我发现我期望这块真的布星,可能在刷了点儿NOIp之后会去搞一波期望dp的题...感觉连基础都没有打扎实?基础概念都布星! 好那先把这题理顺了嗷qwq 首先我们看到期望就会 ...
随机推荐
- JavaScript 是如何工作的:JavaScript 的共享传递和按值传递
摘要: 原始数据类型和引用数据类型的副本作为参数传递给函数. 原文:JavaScript 是如何工作的:JavaScript 的共享传递和按值传递 作者:前端小智 Fundebug经授权转载,版权归原 ...
- eclipse导入java工程
1)File下的import选项 2)点击General,选择Existing Projects into Workspace,点击next 3)点击Browse,在弹出的窗口中选择导入工程所在的文件 ...
- Snapde电子表格支持的文件格式
Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件:它运行的速度非常快,反应非常灵敏.那么它支持哪些文件格式呢? 1.CSV文件格式,是一种以逗号分隔列.以回车分隔行的文本文 ...
- 章节十一、1-Junit介绍
一.Junit是一个开源的测试框架,在selenium的jar包中,不需要单独安装和搭建环境 二.@BeforeClass:当在方法上加了这个注解的话,这个方法会在这个类的第一个test方法之前运行. ...
- C# 获取当前服务器域名
"http://"是协议名 "www.test.com"是域名 "aaa"是站点名 "bbb.aspx"是页面名(文件名 ...
- redis的穿透和雪崩
穿透: 从缓存中查询一个数据,查到为空,需要每次都去数据库中查询.而从数据库中查询出来也为空,也就不写入缓存.导致一个不存在的数每次都去数据库中查询,造成db系统很大压力 造成缓存穿透 解决:如果从数 ...
- SQL Server系统表sysobjects介绍
SQL Server系统表sysobjects介绍 sysobjects 表结构: 列名 数据类型 描述 name sysname 对象名,常用列 id int 对象标识号 xtype char(2) ...
- 【Teradata SQL】日历函数查询
查询2018年agmt_id=1076226890174464676612的,且金额类型代码为0212,每日协议金额. 1.协议金额历史表取某一日数据(20180101) sel t.start_dt ...
- sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file
sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file 1. 权限问题 ...
- 配置sonarqube与gitlab sso认证集成
1.安装插件 sonar插件地址:https://github.com/gabrie-allaigre/sonar-auth-gitlab-plugin 安装插件: 下载插件然后通过maven打包然后 ...