bzoj5483 Usaco2018Dec Balance Beam

题目链接https://lydsy.com/JudgeOnline/problem.php?id=5483

数据范围:略。


题解

首先有一个模型,就是长度为$L$的线段,$f_i$表示这个点每次有$\frac{1}{2}$的几率向左,$\frac{1}{2}$的几率向右。走到端点会掉下去的话,走到右端点的概率。

我们发现:$f_i=\frac{f_{i-1}+f_{i+1}}{2}$,是一个等差数列。

然后,$f_0 = 0, f_L=1$,所以$f_i=\frac{L-i}{L}$。

接着,我们对于每个点$i$,设置一个左侧停止点设置一个右侧停止点的话,就可以根据模型求出答案。

停止点,就是把点$(j,a_j)$放进平面的上凸包,然后$i$在凸包上对应的线段的两个端点即可。

代码

#include <bits/stdc++.h>

#define N 100010 

using namespace std;

typedef long long ll;

char *p1, *p2, buf[100000];

#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )

int rd() {
int x = 0;
char c = nc();
while (c < 48) {
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x;
} ll a[N], st[N], l[N], r[N], top; int main() {
int n = rd();
for (int i = 1; i <= n; i ++ ) {
a[i] = rd();
}
st[ ++ top] = 0, st[ ++ top] = 1;
for (int i = 2; i <= n + 1; i ++ ) {
// st[top - 1], st[top], i
// \frac{a[st[top]] - a[st[top - 1]]}{st[top] - st[top - 1]} < \frac{a[i] - a[st[top]]}{i - st[top]}
// \Rightleftarrow (a[st[top]] - a[st[top - 1]]) * (i - st[top]) < (a[i] - a[st[top]]) * (st[top] - st[top - 1])
while (top >= 2 && (ll)(a[st[top]] - a[st[top - 1]]) * (i - st[top]) < (ll)(a[i] - a[st[top]]) * (st[top] - st[top - 1])) {
top -- ;
}
st[ ++ top] = i;
}
for (int i = 1; i < top; i ++ ) {
for (int j = st[i] + 1; j < st[i + 1]; j ++ ) {
l[j] = st[i], r[j] = st[i + 1];
}
l[st[i]] = st[i], r[st[i]] = st[i];
} for (int i = 1; i <= n; i ++ ) {
ll ans = 0;
if (l[i] == r[i]) {
ans = (ll)a[i] * 100000;
}
else {
ans = (100000 * ((ll)a[l[i]] * (r[i] - i) + (ll)a[r[i]] * (i - l[i]))) / (r[i] - l[i]);
}
printf("%lld\n", ans);
}
return 0;
}

[bzoj5483][Usaco2018 Dec]Balance Beam_凸包_概率期望的更多相关文章

  1. 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. [Nowcoder212D]禁书目录_概率期望

    禁书目录 题目大意:清教需要定期给Index清除记忆,在此之前需要把当中的十万三千本禁书取出来......不幸的是,禁书一旦离开了Index就非常脆弱,具体来说,每一本禁书都有一个魔力值 ai ,其记 ...

  3. USACO2018 DEC(Platinum) (树上乱搞,期望+凸包)

    发现这跟\(Gold\)难度简直天差地别啊.. \(T1\) 传送门 解题思路 这道题还是很可做的,发现题意可以传化成一棵树每次从叶子节点删边,然后有\(m\)条限制,形如\(a\)在\(b\)前面删 ...

  4. [LuoguP2164][SHOI2007]交通网络_拓扑排序_概率期望

    交通网络 题目链接:https://www.luogu.org/problemnew/solution/P2164 数据范围:略. 题解: 直接算不好算,我们考虑建反图然后$Toposort$. 这样 ...

  5. [计蒜客T2238]礼物_线段树_归并排序_概率期望

    礼物 题目大意: 数据范围: 题解: 这题有意思啊($md$卡常 直接做怎么做? 随便上个什么东西,维护一下矩阵乘和插入,比如说常数还算小的$KD-Tree$(反正我是没见人过过 我们漏掉了一个条件, ...

  6. BZOJ_3191_[JLOI2013]卡牌游戏_概率DP

    BZOJ_3191_[JLOI2013]卡牌游戏_概率DP Description   N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随 ...

  7. BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元

    BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...

  8. BZOJ_1691_[Usaco2007 Dec]挑剔的美食家_贪心

    BZOJ_1691_[Usaco2007 Dec]挑剔的美食家_贪心 题意: 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返 ...

  9. BZOJ_4872_[Shoi2017]分手是祝愿_概率与期望

    BZOJ_4872_[Shoi2017]分手是祝愿_概率与期望 Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这 ...

随机推荐

  1. go error=216编译错误

    CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容.请查看计算机的系统信息,了解是否需要 x86 (32 位)或 x64 (64 位)版本的程序, ...

  2. python3之线程(一)

    线程的概念 现在的操作系统几乎都支持运行多个任务,而在操作系统内部,一个任务往往代表的执行的某一个程序,也就是运行中的程序,运行的程序是一个动态的概念,也就是所说的进程,而在进程内部,往往有许多顺序执 ...

  3. [线段树]洛谷P5278 算术天才⑨与等差数列

    题目描述 算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k ...

  4. SpringMVC处理请求释放静态资源的三种方式

    方式一 在SpringMVC的配置文件中添加如下语句 <mvc:default-servlet-handler/> 说明:当SpringMVC前端控制器对静态资源进行拦截后,在通过处理器映 ...

  5. Docker配置文件详解

    先来看一份 docker-compose.yml 文件,不用管这是干嘛的,只是有个格式方便后文解说: version: '2' services: web: image: dockercloud/he ...

  6. CMU Database Systems - Query Optimization

    查询优化应该是数据库领域最难的topic 当前查询优化,主要有两种思路, Rules-based,基于先验知识,用if-else把优化逻辑写死 Cost-based,试图去评估各个查询计划的cost, ...

  7. linux: ubuntu 14.04 和16.04 快速下载

    由于官网服务器在国外,下载速度奇慢,所以我们可以利用阿里云镜像下载ubuntuubuntu 14.04:http://mirrors.aliyun.com/ubuntu-releases/14.04/ ...

  8. yii2 下的redis常用命令集合

    <?php \Yii::$app->redis->set('user','aaa'); \Yii::$app->redis->set('user2','bbb'); \Y ...

  9. Flutter的运行环境标识

    Flutter的四种运行模式:Debug.Release.Profile和test ,在实际开发中,我们往往需要根据当前运行模式的不同,选择不同的操作,比如在Debug模式启用Log.在生产模式关闭L ...

  10. 004-行为型-06-命令模式(Command)

    一.概述 是一种数据驱动的设计模式 请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令. 将请求封装成对象,以便使用不同的请 ...