题目描述

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. echarts 纵坐标数字太长显示补全,以及文字倾斜显示

    如上数字太长,显示补全,以及x坐标的月份当数量大的时候也会显示补全: x可以调节纵坐标label的宽度 y2可以调节横坐标label的高度 grid: { x: 100, //默认是80px y: 6 ...

  2. springmvc 中配置aop

    之前自己搭建了springmvc+spring+mybaits/hibernate 的框架,并在applicationcontext.xml中配置了aop,但 发现aop根本不生效,而不用框架的话则可 ...

  3. Github 团队协作基本流程与命令操作 图解git工作流程

    # 先 fork 项目到自己 github # 1. 从自己仓库克隆到本地(clone 的是项目指定的默认分支,比如 master) git clone git@github.com:me/em.gi ...

  4. Ubuntu 18.04 安装 Xfce桌面和VNC的方法

    首先安装Xfce4桌面环境.Xfce4是在Unix和Unix-like(Linux, FreeBSD)上运行的开源桌面环境,其特点是快速,轻量,同时拥有美观的交互界面,易于使用. Xfce4的安装十分 ...

  5. 洛谷P1993 小K的农场_差分约束_dfs跑SPFA

    Code: #include<cstdio> #include<queue> using namespace std; const int N=10000+233; const ...

  6. JavaScript(DOM编程补充一)

    HTML属性的直接调用: 还可以通过getAttribute方法获取属性的值: setAttribute方法: removeAttribute ---------------------------- ...

  7. JS中的call()(转)

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方 ...

  8. Ajax-URL 防止数据缓存,添加时间戳

    url:CONTEXTPATH + "/dataService/getSourceStatics?type=0&t="+new Date().getTime(),

  9. [Angular] Getting to Know the @Attribute Decorator in Angular

    So when you using input binding in Angular, it will always check for update. If you want to improve ...

  10. DirectX11 学习笔记1 - 第一个程序

    为了加快学习速度,和使程序更加easy理解.  我把sampler tutorial里面的一个样例 的固定代码和常常修改的代码经过简单的类的封装了一下. 以后学习的时候就能够仅仅在还有一个文件写ren ...