【数学期望】Gym 101137LLazy Coordinator
来源:互联网 发布:远走高飞网络歌曲 编辑:程序博客网 时间:2024/06/06 19:32
Problem Description
给你n个事件,接下来2*n行,给你任何事件可能的开始时间,和任何事件可能的结束时间。
让你输出每个事件存在时间的数学期望
思路:
这道题有两个核心点。
一:算期望的时候,事件时间差 两两相减的话,O(n*n)会超时。我们需要对公式进行处理。我们拿例子来说明把。
例如样例
3
+ 4
+ 10
- 11
+ 16
- 20
- 100
对于4这个事件存在时间的期望 = (11-4) * 0.5 + (20-4) * 0.25 + (100 - 4) * 0.25 = 11 * 0.5 + 20 * 0.25 + 100 * 0.25 - 4 * (0.5 + 0.25 + 0.25)。因为对于一个事件,概率和等于1。所以式子等于 11 * 0.5 + 20 * 0.25 + 100 * 0.25 - 4
二: 如何处理对于每个事件的 结束时间的期望也就是这个式子11 * 0.5 + 20 * 0.25 + 100 * 0.25。对于事件4这个式子其实是 11*0.5 + 20*0.5*0.5 + 100*0.5*0.5*1 对于事件16这个式子就变成了20*0.5 + 100*0.5
正着求,有点小复杂(我一开始就是正着,没能敲出来,看了学长的代码发现倒着贼方便),倒着求,详细看代码
#include<bits/stdc++.h>using namespace std;#define maxn 200008int t[maxn], Count[maxn];int vis[maxn];double ans[maxn];int main(){ int n, i; char s[10]; while(~scanf("%d", &n)) { memset(Count, 0, sizeof(Count));//记录到这个i点,有多少正在开始的事件 memset(vis, 0, sizeof(vis)); for(i = 1; i <= 2*n; i++) { scanf("%s %d", s, &t[i]); if(s[0] == '+') { vis[i] = 1; Count[i] = Count[i-1] + 1; } else Count[i] = Count[i-1] - 1; } double sum = 0; int k; for(i = 2*n; i >= 1; i--)//倒着求ans[]数组,也就是上面强调的式子 { if(!vis[i]) { k = Count[i] + 1; sum = sum*(1-1.0/k) + 1.0*t[i]/k; } else { ans[i] = sum; } } for(i = 1; i <= 2*n; i++) { if(vis[i]) printf("%.10lf\n", ans[i] - t[i]); } } return 0;}
阅读全文
0 0
- 【数学期望】Gym 101137LLazy Coordinator
- gym 101137 L Lazy Coordinator(概率)
- 数学期望
- 数学期望
- 数学期望
- Coordinator
- 刷一波数学期望,数论,数学
- 条件数学期望
- 一个数学期望问题
- 【数学期望】poj3682
- hdu 4336 数学期望
- Candy( 数学期望 )
- 条件数学期望
- 条件数学期望
- [UVA10288] Coupons && 数学期望
- [UVA1639] Candy && 数学期望
- 数学期望与方差
- 数学期望DP小结
- Android percent-support-lib百分比布局
- 修改Ubuntu镜像源
- CNN神经网络解释,及MNIST实例详注
- 【学习笔记】设计模式-迭代器模式
- javaHL(JNI) Not Available
- 【数学期望】Gym 101137LLazy Coordinator
- MySQL中concat函数
- 蚁群算法
- Codeforces--477Div.2--B
- es6继承
- Java面向对象三大特征之多态
- lasso 详介
- sql 与 hql
- 一、C++ 学生成绩系统