题目描述

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: 复制

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

  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$两种情况讨论

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

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. const int MAXN=1e6+;
  5. const double INF=1e16;
  6. #define lb(x) (x&(-x))
  7. inline int read()
  8. {
  9. char c=getchar();int x=,f=;
  10. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  11. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  12. return x*f;
  13. }
  14. int N;
  15. struct node
  16. {
  17. int h,t,ID;
  18. double ans;
  19. bool operator < (const node &a) const
  20. {
  21. return a.h==h?t>a.t:h<a.h;
  22. }
  23. }a[MAXN],now;
  24. int comp(const node &a,const node &b)
  25. {
  26. return a.ID<b.ID;
  27. }
  28. namespace BIT
  29. {
  30. double T[MAXN];
  31. void PointChange(int pos,double val)
  32. {
  33. while(pos<=N)
  34. {
  35. T[pos]+=val;
  36. pos+=lb(pos);
  37.  
  38. }
  39. }
  40. double Sum(int pos)
  41. {
  42. double ans=;
  43. while(pos) ans+=T[pos],pos-=lb(pos);
  44. return ans;
  45. }
  46. }
  47. int main()
  48. {
  49. #ifdef WIN32
  50. freopen("a.in","r",stdin);
  51. #endif
  52. N=read();
  53. for(int i=;i<=N;i++) a[i].h=read();
  54. for(int i=;i<=N;i++) a[i].t=read(),a[i].ID=i;
  55. sort(a+,a+N+);
  56. for(int i=;i<=N;i++)
  57. {
  58. now.h=a[i].h-a[i].t;
  59. if(a[i].t)
  60. {
  61. int posmax=upper_bound(a+,a+N+,now)-a-;
  62. if(posmax) a[i].ans=BIT::Sum(posmax)/posmax+;
  63. else a[i].ans=;
  64. }
  65. else
  66. {
  67. int posmin=lower_bound(a+,a+N+,now)-a-;
  68. int posmax=upper_bound(a+,a+N+,now)-a-;
  69. a[i].ans=(double)(posmax+BIT::Sum(posmin))/posmin;
  70. }
  71. BIT::PointChange(i,a[i].ans);
  72. }
  73. sort(a+,a+N+,comp);
  74. for(int i=;i<=N;i++)
  75. {
  76. if(a[i].ans>=-INF&&a[i].ans<=INF)
  77. printf("%.4lf ",a[i].ans);
  78. else printf("0.0000 ");
  79. }
  80. return ;
  81. }

清北集训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. 工欲善其事必先利其器之windows篇

    Windows是我们最常用的系统,下面就让我们重新认识一下Windows有哪些可以让我们提高工作效率的快捷键以及部分技巧,,以及在外行看来可以看起来逼格高的技巧! 1.Windows最实用,最常用的快 ...

  2. App测试- adb monkey测试

    一. 安装和配置SDK 1. 下载Android SDK并解压.如下图:(如果不存在tool和platform_tool,请点击SDK Manager在线下载和更新) 2.下载完成后,配置SDK环境变 ...

  3. Virtual servers on a Raspberry Pi with the light weight OS virtualization system Docker!

    转自:http://www.hyggeit.dk/2014/02/virtual-servers-on-raspberry-pi-with.html Virtual servers on a Rasp ...

  4. Project Euler 14 Longest Collatz sequence

    题意:对于任意一个数 N ,寻找在 100,0000 之内按照规则( N 为奇数 N = N * 3 + 1 ,N 为偶数 N = N / 2 ,直到 N = 1 时的步数 )步数的最大值 思路:记忆 ...

  5. Btrfs 文件系统

    btrfs文件系统简介  btrfs文件系统:技术预览版(Centos7)  Btrfs(B-tree.Butter FS.Better FS),GPL授权,Orale2007提出是想用来取代Ext文 ...

  6. 端到端图片识别 Python实现 Tensorflow

    基于python语言的tensorflow的‘端到端’的字符型验证码识别 1   Abstract 验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法, 但是近几年的 ...

  7. 【codeforces 805D】Minimum number of steps

    [题目链接]:http://codeforces.com/contest/805/problem/D [题意] 给你一个字符串; 里面只包括a和b; 让你把里面的"ab"子串全都去 ...

  8. BA-DDC与PLC的比较(转载)

    1.概念 DDC(Direct Digital Control ) ,根据字面的意思为直接的数据控制,它包含了对采集数据的数字化以及对数据的数字处理.DDC的产生式随着楼宇控制.能源管理的需求,以及为 ...

  9. CF909B Segments

    CF909B Segments 题意翻译 题目描述 给你一个整数N.考虑坐标轴上所有可能的部分,在整数点上的端点,坐标在0到N之间,包括它们. 您希望在几个层中绘制这些片段,这样在每个层中这些片段就不 ...

  10. 单词数 (STL set集合)

    单词数 Problem Description lily的好朋友xiaoou333近期非常空.他想了一件没有什么意义的事情.就是统计一篇文章里不同单词的总数.以下你的任务是帮助xiaoou333解决问 ...