题目链接:洛谷


这道题看起来是个期望题,但是其实是一道计算几何(这种题太妙了)

首先有一个很好的结论,在一个长度为$L$的数轴上,每次从$x$处出发,不停地走,有$\frac{x}{L}$的概率从右端点掉下去,$\frac{L-x}{L}$从左端点掉下去。

这个证明的话,感性理解一下。

令$l_x$表示从$x$处掉到左端点的概率,则$l_0=1,l_L=0$,且对于$x\in (0,L)$,$l_x=\frac{l_{x-1}+l_{x+1}}{2}$,所以$l_x$构成一个等差数列,所以得证。


显然,我们肯定是不能一直走的,不然得分肯定是0,但是我们可以“掉进”一些权值比较高的点使得答案最优,我们称这些点为“停止点”。

设从$x$处出发。

如果$x$本身就是“停止点”,那么答案就是$f_x$。($f_x$为这个点的权值)

否则$x$左右两侧的最近的“停止点”为$a,b$,这种策略的答案为$f_a*\frac{b-x}{b-a}+f_b*\frac{x-a}{b-a}$

我们发现它就是$(a,f_a),(b,f_b)$两点连接的线段在$x$处的$y$值

所以我们维护对$(x,f_x)(x\in [0,n+1])$这$n+2$个点计算出上凸包,然后就是直接贪心计算了。

 #include<cstdio>
#define Rint register int
using namespace std;
typedef long long LL;
const int N = ;
struct Point {
LL x, y;
inline Point operator - (const Point &o) const {return (Point){x - o.x, y - o.y};}
inline LL operator * (const Point &o) const {return x * o.y - y * o.x;}
} p[N];
int n, top;
LL a[N];
inline void push(Point now){
while(top > && (now - p[top - ]) * (p[top] - p[top - ]) < ) -- top;
p[++ top] = now;
}
int main(){
scanf("%d", &n);
for(Rint i = ;i <= n + ;i ++){
if(i && i <= n) scanf("%lld", a + i), a[i] *= ;
push((Point){i, a[i]});
}
int now = ;
for(Rint i = ;i <= n;i ++){
while(p[now].x < i) ++ now;
if(p[now].x == i) printf("%lld\n", p[now].y);
else {
printf("%lld\n", (LL) (1.0 * ((i - p[now - ].x) * p[now].y + (p[now].x - i) * p[now - ].y) / (p[now].x - p[now - ].x)));
}
}
}

Luogu5155

Luogu5155 [USACO18DEC]Balance Beam的更多相关文章

  1. Luogu5155 USACO18DEC Balance Beam(概率期望+凸包)

    假设已经求出了在每个点的最优期望收益,显然最优策略是仅当移动一次后的期望收益>当前点收益时移动.对于初始点,其两边各存在一个最近的不满足上述条件的位置,因此从初始点开始随机游走,直到移动到这两个 ...

  2. 洛谷P5155 [USACO18DEC]Balance Beam(期望,凸包)

    你以为它是一个期望dp,其实它是一个凸包哒! 设平衡木长度为\(L\),把向右走平衡木那个式子写一下: \[dp[i]=\frac{dp[i+1]+dp[i-1]}{2}\] 然后会发现这是一个等差数 ...

  3. [USACO18DEC]Balance Beam

    题目链接:这里 或者这里 答案是很显然的,记\(g(i)\)为在\(i\)下平衡木时的期望收益 那么\(g(i)=max(f(i),\frac{g(i-1)+g(i+1)}{2})\) 好了做完了 T ...

  4. 题解-USACO18DEC Balance Beam详细证明

    (翻了翻其他的题解,觉得它们没讲清楚这个策略的正确性) Problem 洛谷5155 题意概要:给定一个长为\(n\)的序列,可以选择以\(\frac 12\)的概率进行左右移动,也可以结束并得到当前 ...

  5. p5155 [USACO18DEC]Balance Beam

    传送门 分析 https://www.luogu.org/blog/22112/solution-p5155 代码 #include<bits/stdc++.h> using namesp ...

  6. 题解 [USACO18DEC]Balance Beam

    被概率冲昏的头脑~~~ 我们先将样例在图上画下来: 会发现,最大收益是: 看出什么了吗? 这不就是凸包吗? 跑一遍凸包就好了呀,这些点中,如果i号点是凸包上的点,那么它的ans就是自己(第二个点),不 ...

  7. [USACO18DEC]Balance Beam P

    根据题意不难发现这个模型是不好进行贪心的,于是可以考虑使用 \(dp\).可以令 \(dp_i\) 表示在 \(i\) 位置以最优策略能获得的报酬期望值,那么会有转移: \[dp_i = \max(f ...

  8. bzoj5483: [Usaco2018 Dec]Balance Beam

    又又又又又又又被踩爆了 首先容易写出这样的期望方程:f(1)=max(d(1),f(2)/2),f(n)=max(d(n),f(n-1)/2), f(i)=max(d(i),(f(i-1)+f(i+1 ...

  9. 当PsychicBoom_发觉自己是个大SB的时候……

    这些题都是没ac调了好久发现是sb错误的题--. 想清楚再写题!!! 2019.4.18 洛谷P5155 [USACO18DEC]Balance Beam 转移方程\((a[l[i]]*(r[i]-i ...

随机推荐

  1. HDR拍照

    HDR 拍照:        (High Dynamic Range Imaging)高动态范围成像,是用来实现比普通数字图像技术更大曝光动态范围(即更大的明暗差别)的一组技术.高动态范围成像的目的就 ...

  2. C# 最牛逼的Utility工具类

    完整代码: using System; using System.Collections.Specialized; using System.IO; using System.Net; using S ...

  3. css 初始化样式

    @charset "UTF-8"; /* reset */ html,body,div,h1,h2,h3,h4,h5,h6,p,dl,dt,dd,ol,ul,li,fieldset ...

  4. iis7 设置自定义404页面无效解决方案

    想给自己做的的网站自定义一个404页面,开始 双击红框提示的错误页图标 双击上图红框提示的所示404行 修改上图红框提示的内容如下:我是直接在根目录放了一个自己做的404.html,实际情况要填写你自 ...

  5. (转)http authorization 基本认证

    转:https://www.cnblogs.com/chenrong/articles/5818498.html http协议是无状态的, 浏览器和web服务器之间可以通过cookie来身份识别. 桌 ...

  6. tp5分页后数据处理

  7. ubuntu的磁盘扩容

    前言:以前项目的人给ubuntu虚拟机分配磁盘空间走的默认,导致后期/根和swap空间跟不上需求,需要扩容 流程如下: 1.先添加块硬盘,命令行输入fdisk -l,会发现多了个/dev/sdb(vd ...

  8. Gradle: Download 下载慢的解决办法

    应该是gradle被墙了,在网上查得:使用阿里云的国内镜像仓库地址,就可以快速的下载需要的文件: 修改项目根目录下的文件 build.gradle : buildscript { repositori ...

  9. sklearn交叉验证-【老鱼学sklearn】

    交叉验证(Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法.于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证. 一开始 ...

  10. python TextMining

    01.Crawling url_request # -*- coding: utf-8 -*- """ Created on Sun Feb 17 11:08:44 20 ...