题目描述

LYK在玩一个魔法游戏,叫做跳跃魔法。 有n个点,每个点有两个属性hi和ti,表示初始高度,和下降高度。也就是说,它初始时高度为hi,一旦LYK踩在这个点上,由于重力的影响,这个点的高度会下降ti,当LYK离开这个点时,这个点的高度又会回到hi。 众所周知的是,跳跃游戏一般是往下跳的,每次LYK可以从一个点跳到任意一个高度不超过它的点,也就是说,当ti=0时,它可以跳到自己本来所在的点。 当没地方可以跳的时候,LYK就会跳到地面,现在LYK想以第i个点为起点,问期望跳多少次能跳到地面。当然i可以是1~n中的任意一个数字。 若期望步数为无穷,输出0.000。 设oo表示无穷大,X为一个数,有oo-X=oo,oo*X=oo,oo/X=oo,oo+X=oo。

输入输出格式

输入格式:

第一行输入一个数n,表示有n个点。 第二行输入n个数,表示hi。 第三行输入n个数,表示ti。

输出格式:

输出一行n个数,表示以当前点为起点时,期望跳几次跳到地面(保留4位小数),若期望次数为无穷,输出“0.0000”。

输入输出样例

输入样例#1: 复制

4
4 2 2 3
0 1 0 0
输出样例#1: 复制

3.8333 1.0000 3.0000 3.5000

说明

对于20%的数据n<=5。 对于另外20%的数据所有hi都相等。 对于再另外20%的数据不存在ti=0。 对于再再另外20%的数据hi都互不相等。 对于100%的数据1<=n,hi<=10^5,0<=ti<=hi。

一道并不难的期望dp

推出样例就相当于做完一半了

对于一个点,分$t=0$和$t!=0$两种情况讨论

然后拿个树状数组维护一下就好了

#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=1e6+;
const double INF=1e16;
#define lb(x) (x&(-x))
inline int read()
{
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int N;
struct node
{
int h,t,ID;
double ans;
bool operator < (const node &a) const
{
return a.h==h?t>a.t:h<a.h;
}
}a[MAXN],now;
int comp(const node &a,const node &b)
{
return a.ID<b.ID;
}
namespace BIT
{
double T[MAXN];
void PointChange(int pos,double val)
{
while(pos<=N)
{
T[pos]+=val;
pos+=lb(pos); }
}
double Sum(int pos)
{
double ans=;
while(pos) ans+=T[pos],pos-=lb(pos);
return ans;
}
}
int main()
{
#ifdef WIN32
freopen("a.in","r",stdin);
#endif
N=read();
for(int i=;i<=N;i++) a[i].h=read();
for(int i=;i<=N;i++) a[i].t=read(),a[i].ID=i;
sort(a+,a+N+);
for(int i=;i<=N;i++)
{
now.h=a[i].h-a[i].t;
if(a[i].t)
{
int posmax=upper_bound(a+,a+N+,now)-a-;
if(posmax) a[i].ans=BIT::Sum(posmax)/posmax+;
else a[i].ans=;
}
else
{
int posmin=lower_bound(a+,a+N+,now)-a-;
int posmax=upper_bound(a+,a+N+,now)-a-;
a[i].ans=(double)(posmax+BIT::Sum(posmin))/posmin;
}
BIT::PointChange(i,a[i].ans);
}
sort(a+,a+N+,comp);
for(int i=;i<=N;i++)
{
if(a[i].ans>=-INF&&a[i].ans<=INF)
printf("%.4lf ",a[i].ans);
else printf("0.0000 ");
}
return ;
}

清北集训Day1T3 LYK loves jumping(期望DP)的更多相关文章

  1. 清北学堂2018DP&图论精讲班 DP部分学习笔记

    Day 1 上午 讲的挺基础的--不过还是有些地方不太明白 例1 给定一个数n,求将n划分成若干个正整数的方案数. 例2 数字三角形 例7 最长不下降子序列 以上太过于基础,不做深入讨论 例3 给定一 ...

  2. 清北集训Day6T1(生成函数)

    听rqy说可以用生成函数做,感觉比较有意思 我们考虑在DP转移的时候, $5,7,9$这三个数是没有限制的 因此他们出现的次数用01串表示的话就是$1111111111111111......$ $3 ...

  3. 清北集训Day3T1(转换)

    这题可能是我与正解里的最近的一次了,可以还是sb的把正解叉了. 正解其实比较显然:因为$f(x)$只有81个取值,所以我们可以枚举$f(x)$,然后计算$x$,再判断$x$是否可以转化为$f(x)$ ...

  4. [2016北京集训测试赛5]azelso-[概率/期望dp]

    Description Solution 感谢大佬的博客https://www.cnblogs.com/ywwyww/p/8511141.html 定义dp[i]为[p[i],p[i+1])的期望经过 ...

  5. 五一清北学堂培训之Day 3之DP

    今天又是长者给我们讲小学题目的一天 长者的讲台上又是布满了冰红茶的一天 ---------------------------------------------------------------- ...

  6. 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)

    清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...

  7. 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)

    清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...

  8. 清北Day 2

    清北第二天,感受到了来自这个世界的不友善,大概把没听过不会的"名词"记录下来就已经一面了,然后被大佬说这都是最基础的东西,就很皮,那就趁别人练习字符串的题的时候,来写波博客了,倒不 ...

  9. 清北Day4

    版权声明:如需转载请标明出处,未得到本人许可请勿转载. 今天就可以看到传说中的 数据结构 嘿嘿嘿嘿 都有什么呢 链表 队列 栈 st表 hash 线段树 树链剖分 一.栈: 放出来这个看烂了的图 值得 ...

随机推荐

  1. mysql5.5和5.6版本更新内容

    mysql 5.5,5.6 比5.1改进地方: 1,5.5默认存储引擎为innodb2,5.5增加cpu多核处理能力:innodb_read_io_threads innodb_write_io_th ...

  2. [SOA]REST与SOA两种架构的异同比较

    REST的特性 它基于HTTP协议,是一种明确构建在客户端/服务端体系结构上的一种风格.特征如下: 1.网络上的资源都被抽象为资源,这些资源都具有唯一的统一资源标识符(URI:Uniform Reso ...

  3. Apache Http Client 4 上传多个文件 (示例代码可在 github 上找到)

    转自:http://www.baeldung.com/httpclient-multipart-upload Multipart Upload with HttpClient 4 1. Overvie ...

  4. Ural 1996 Cipher Message 3 (生成函数+FFT)

    题面传送门 题目大意:给你两个$01$串$a$和$b$,每$8$个字符为$1$组,每组的最后一个字符可以在$01$之间转换,求$b$成为$a$的一个子串所需的最少转换次数,以及此时是从哪开始匹配的. ...

  5. gpio_request 原形代码

    http://blog.csdn.net/maopig/article/details/7428561 其原型为 int gpio_request(unsigned gpio, const char ...

  6. python之简述上下文管理

    上下文管理器 原理 代码讲解 原理 上下文管理能保证资源会被正确回收,即保证退出步骤的执行.其用处最多的是,作为确保资源被正确回收的一种方式. 一种重复使用的 try-except-finally 结 ...

  7. 【CodeForces 574B】Bear and Three Musketeers

    [链接] 我是链接,点我呀:) [题意] [题解] 枚举每一条边(x,y) 然后再枚举y的出度z 看看g[x][z]是否等于1(表示联通) 如果等于1就说明找到了一个三元环,则尝试用它们的出度和-6更 ...

  8. --- Error: failed to execute '.\ARMCC\bin\ArmAsm'

    1.KEIL4在开发STM32程序时报: Error: failed to execute '.\ARMCC\bin\ArmAsm' 或是Error: failed to execute '.\ARM ...

  9. Profile 动态切换环境

    一.多 Profile 文件我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml默认使用 application.properties 的 ...

  10. spring md5 加密

    一.spring 自带的 DigestUtils 工具类可以进行 md5 加密 //导入包 import org.springframework.util.DigestUtils; //对密码进行 m ...