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))/2),d是直接下来的收益
令S(i)等于后面那一个东西,那么f(i)=max(d(i),S(i))
套了max很难直接求,但是S(i)和d(i)一定是定值,那些由S贡献的点实际上就是被它左右两边各一个点的d贡献的,更确切的,假如把那些点是由d贡献找出来,那些由S贡献的点实际上就是被它左右两边第一个被d贡献的点贡献的
这样一来假设这两个点为L,R,则f(i)=x到L的概率*d(L)+x到R的概率*d(R)
考虑这样的一个子问题:数轴上0~n长度为n一段中,求由x走到n的概率
设g(i)表示i走到n的概率,则g(0)=0,g(n)=1,g(i)=(g(i-1)+g(i+1))/2,明显这个是个等差数列啊!
那么公差就是1/n,x走到n的概率就是x/n
x走到0,同理g(0)=1,g(n)=0,公差为-1/n,概率就是n-x/n
所以f(i)=((R-x)*d(L)+(x-L)*d(R))/(R-L)
现在问题就在于如何找到那些由d贡献的点了,我们在平面直角坐标系中把(i,d(i))标出来,则这些点就是凸包上的点
why?看图,如果我们要判断x是不是靠d贡献
如图,((R-x)*d(L)+(x-L)*d(R))就是两个矩形的面积,容易发现两个圈画出来的面积是相等的,画出来的一段就是由L和R贡献出的S(x),它就在L和R的直线上,是这条直线的自变量取x时的贡献!也就是说,这个点在直线下方,就意味着S(x)>d(x),说明取d不如由L和R贡献。
完结撒花~~~
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const int _=1e2;
const int maxn=1e5+_; struct point{int x,y;}p[maxn];
LL multi(point p1,point p2,point p0)
{
LL x1,y1,x2,y2;
x1=p1.x-p0.x;
y1=p1.y-p0.y;
x2=p2.x-p0.x;
y2=p2.y-p0.y;
return x1*y2-x2*y1;
}
int top,sta[maxn];
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
int n;
scanf("%d",&n); sta[++top]=;
for(int i=;i<=n;i++)
{
p[i].x=i,scanf("%d",&p[i].y);
while(top>&&multi(p[sta[top]],p[i],p[sta[top-]])>=)top--;
sta[++top]=i;
}
p[n+].x=n+;
while(top>&&multi(p[sta[top]],p[n+],p[sta[top-]])>=)top--;
sta[++top]=n+; int L=,R=;
for(int i=;i<=n;i++)
{
while(L<top&&p[sta[L+]].x<=p[i].x)L++;
if(p[sta[L]].x==p[i].x)
printf("%lld\n",LL(p[i].y)*100000LL);
else
{
while(R<top&&p[sta[R]].x<=p[i].x)R++;
double d=(double(sta[R]-i)*double(p[sta[L]].y))/double(sta[R]-sta[L]) +
(double(i-sta[L])*double(p[sta[R]].y))/double(sta[R]-sta[L]);
d*=;
if(fabs(d-ceil(d))<=1e-)d+=1e-;
printf("%.0lf\n",floor(d));
}
} return ;
}
bzoj5483: [Usaco2018 Dec]Balance Beam的更多相关文章
- [bzoj5483][Usaco2018 Dec]Balance Beam_凸包_概率期望
bzoj5483 Usaco2018Dec Balance Beam 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=5483 数据范围:略. 题解 ...
- BZOJ5484: [Usaco2018 Dec]Sort It Out
5484: [Usaco2018 Dec]Sort It Out https://www.lydsy.com/JudgeOnline/problem.php?id=5484 Sol. 考虑没有在被喊叫 ...
- 洛谷P5155 [USACO18DEC]Balance Beam(期望,凸包)
你以为它是一个期望dp,其实它是一个凸包哒! 设平衡木长度为\(L\),把向右走平衡木那个式子写一下: \[dp[i]=\frac{dp[i+1]+dp[i-1]}{2}\] 然后会发现这是一个等差数 ...
- Luogu5155 [USACO18DEC]Balance Beam
题目链接:洛谷 这道题看起来是个期望题,但是其实是一道计算几何(这种题太妙了) 首先有一个很好的结论,在一个长度为$L$的数轴上,每次从$x$处出发,不停地走,有$\frac{x}{L}$的概率从右端 ...
- [USACO18DEC]Balance Beam
题目链接:这里 或者这里 答案是很显然的,记\(g(i)\)为在\(i\)下平衡木时的期望收益 那么\(g(i)=max(f(i),\frac{g(i-1)+g(i+1)}{2})\) 好了做完了 T ...
- 题解-USACO18DEC Balance Beam详细证明
(翻了翻其他的题解,觉得它们没讲清楚这个策略的正确性) Problem 洛谷5155 题意概要:给定一个长为\(n\)的序列,可以选择以\(\frac 12\)的概率进行左右移动,也可以结束并得到当前 ...
- BZOJ5487: [Usaco2018 Dec]Cowpatibility
Description 研究证明,有一个因素在两头奶牛能否作为朋友和谐共处这方面比其他任何因素都来得重要--她们是不是喜欢同 一种口味的冰激凌!Farmer John的N头奶牛(2≤N≤50,000) ...
- Luogu5155 USACO18DEC Balance Beam(概率期望+凸包)
假设已经求出了在每个点的最优期望收益,显然最优策略是仅当移动一次后的期望收益>当前点收益时移动.对于初始点,其两边各存在一个最近的不满足上述条件的位置,因此从初始点开始随机游走,直到移动到这两个 ...
- p5155 [USACO18DEC]Balance Beam
传送门 分析 https://www.luogu.org/blog/22112/solution-p5155 代码 #include<bits/stdc++.h> using namesp ...
随机推荐
- ElasticSearch 多索引
1.用逗号将索引隔开,如: $ curl -XPOST http://localhost:9200/aaa,website/_search/ { "took": 1, " ...
- SQL Server 命令行操作
连接sqlcmd -S localhost -U SA -P '123456'; 执行脚本 sqlcmd -S localhost -U SA -P '123456' -i /root/dbo.sql ...
- [NOIP2012T3]开车旅行
题目描述 NOIP 2012 提高组 题3小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 ...
- SPOJ 26108 TRENDGCD - Trending GCD
Discription Problem statement is simple. Given A and B you need to calculate S(A,B) . Here, f(n)=n, ...
- Android SDK Manager 更新时的“https://dl-ssl.google.com refused”错误
Android SDK Manager 消除SDK更新时的“https://dl-ssl.google.com refused”错误 消除SDK更新时,有可能会出现这样的错误:Download int ...
- Liunx常用命令(备用)
常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir ...
- jmeter.properties控制聚合报告的用户响应时间设置和smmary results
jmeter.properties的配置Summariser控制输出Summary Results,可以显式rt和tps等信息 Aggregate Report配置可以控制聚合报告的内容,控制90%用 ...
- three.js 源代码凝视(十五)Math/Plane.js
商域无疆 (http://blog.csdn.net/omni360/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:商域无疆 - 本博客专注于 敏捷开发 ...
- 卸载 linux http
当我们想卸载httpd 的时候,使用rpm -qa httpd 的时候,我们发现有很多的依赖包.我们耐心的想一个一个的卸载的时候(使用rpm -e httpd-*),还会进入死循环.解决的办法是:使用 ...
- C++学习总结 复习篇2
延续上一小节内容:下面继续讲解虚函数和多态 虚函数和多态 基类指针可以指向任何派生类的对象,但是不能调用派生类对象的成员. 但是,基类可以调用覆盖了虚函数的函数.(现在调用将来,这有问题,说明现在 ...