Description

osu 是一款群众喜闻乐见的休闲软件。 
我们可以把osu的规则简化与改编成以下的样子: 
一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串。在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释) 
现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数。 

Input

第一行有一个正整数n,表示操作个数。接下去n行每行有一个[0,1]之间的实数,表示每个操作的成功率。 

Output

只有一个实数,表示答案。答案四舍五入后保留1位小数。 

Sample Input

3
0.5
0.5
0.5

Sample Output

6.0

HINT

【样例说明】 
000分数为0,001分数为1,010分数为1,100分数为1,101分数为2,110分数为8,011分数为8,111分数为27,总和为48,期望为48/8=6.0 
N<=100000
题解
  大牛都说是水题水题,然而被折磨的欲仙欲死,不过终于在 s_z_l老爷 和 Ngshily大爷 的帮助下搞清楚了,写一写帮助后人吧。。。
  1>
    首先我们要求的是E(x^3),我们需要明确这里的x^3指的是得分。
    我们按照原本的思路,考虑每一位的∆,那么我们假设这一位是1,那么 E((x + 1)^3) = E(x^3) + ∆;
      ∆ = E((x + 1) ^ 3) - E(x^3) = E((x + 1) ^ 3 - x ^ 3) = E(x^2 + 2x + 1 + x^2 + x + x^2)  = E(3x^2 + 3x + 1) = 3E(x^2) + 3E(x) + 1.
    所以我们得到了∆的表达式,那么这一位是1的概率是pi,所以需要给∆乘上pi --> E((x + 1)^3) = E((x)^3) + p[x + 1] * (3E((x) ^ 2) + 3E(x) + 1).
  
  2>
    然后我们需要计算E(x^2), E(x) 的价值,我们依然要明确这里的x是结尾连续1的长度的期望,和上面的x并不是一个意思,我们用l代替。
    同样的我们假设这一位是1,那么E((l + 1)^2) = E(l^2) + ∆    -->    ∆ = 2E(l) + 1
    所以我们应该整个乘上p[l + 1],所以E((l + 1) ^ 2) = p[l + 1] * (E(l ^ 2) + ∆).
  遇到的几个问题:
    1> 首先我们需要明确 E(x^3) 这个是答案值,我们这样考虑,E(x^3) = E((x - 1)^3) + ∆。E((x - 1)^3)是不变的,我们需要给他加上新的值乘上概率,也就是说我们应该写成 E(x^3) = E((x - 1) ^ 3) + p[x] * ∆. 注意在∆前面乘上p[x],这代表着这一位的可能取值。
    2> 在递推过程中,∆ = 3E((x - 1)^2) + 3E(x - 1) + 1。也就是说这一位需要的是上一位的E(x^2)和E(x)。这里的x是指长度,所以我们在解决E(x^2)的问题时,同样可以一样考虑,E(x^2) = E((x - 1) ^ 2) + ∆,但是注意这是这一位取1的值的可能取值,那么我们应该E(x^2) = p[x] * (E((x - 1)^2) + ∆).
    3> 注意,1>和2>中p[x]的乘的地方是不一样的,应为一个是累加贡献,而另一个是加上以后才是这一位如果取一的取值。
    4> 在解决E(x^3)的时候,如果用E(x^3) - E((x - 1) ^ 3) = 3E(x^2) - 3E(x) + 1。但是这是不一样的,应为我们在用E((x - 1)^3) 去推理 E(x^3) 所以后面应该是用3E((x - 1)^2) + 3E(x - 1) + 1.

 1 #include <bits/stdc++.h>
 2 #define rep(i, a, b) for (int i = a; i <= b; i++)
 3 #define drep(i, a, b) for (int i = a; i >= b; i--)
 4 #define REP(i, a, b) for (int i = a; i < b; i++)
 5 #define pb push_back
 6 #define mp make_pair
 7 #define clr(x) memset(x, 0, sizeof(x))
 8 #define xx first
 9 #define yy second
10 using namespace std;
11 typedef long long i64;
12 typedef pair<int, int> pii;
13 const int inf = ~0U >> 1;
14 const i64 INF = ~0ULL >> 1;
15 //***************************************
16 int main() {
17     int n;
18     scanf("%d", &n);
19     double ans(0), l(0), l2(0), p;
20     rep(i, 1, n) {
21         scanf("%lf", &p);
22         ans += p * (3 * l2 + 3 * l + 1);
23         l2 = p * (l2 + 2 * l + 1);
24         l = p * (l + 1);
25     }
26     printf("%.1lf\n", ans);
27     return 0;
28 }

View Code

转载于:https://www.cnblogs.com/y7070/p/5042370.html

bzoj-4318 OSU! 【数学期望】相关推荐

  1. bzoj 4318: OSU!(概率DP)

    4318: OSU! Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 910  Solved: 709 [Submit][Status][Discuss ...

  2. BZOJ 4318 OSU! 期望DP

    题目大意:给定一个长度为 n n的01串,第ii个位置有 ai a_i的概率为 1 1,最终得分为01串中所有连在一起1的长度的立方和,求得分的期望 假如这个01串使确定的,考虑每新增一个位置,如果这 ...

  3. bzoj 4318 OSU!

    期望dp. 考虑问题的简化版:一个数列有n个数,每位有pi的概率为1,否则为0.求以每一位结尾的全为1的后缀长度的期望. 递推就好了. l1[i]=(l1[i-1]+1)*p[i]+0*(1-p[i] ...

  4. bzoj 4318 osu 【三次方问题】【dp】

    二次方的问题可以说是经典了,三次方yy一下也就出来了. (x+1)^3=x^3+3x^2+3x+1 所以维护x^2 x的期望值.注意x^2的期望值不等于x期望值的平方. #include<cst ...

  5. 【BZOJ - 3450】Tyvj1952 Easy(数学期望,期望的线性性)

    题干: 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a个comb就 ...

  6. 解题报告(一)F、(2018 ACM - ICPC shenyang I)Distance Between Sweethearts(数学期望 + 乘法原理 + FWT)(4.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  7. 数论小白都能看懂的数学期望讲解

    -1.灌水 这里阅读应该效果更佳 想了解更多关于数论的内容,可戳这里 感谢@command_block 大佬提出宝贵建议 也感谢洛谷及UVA的相关题目 如果有小瑕疵可以在评论区提出 内容可能有点多但很 ...

  8. 随机变量的数字特征(数学期望,方差,协方差与相关系数)

    戳这里:概率论思维导图 !!! 数学期望 离散型随机变量的数学期望 (这里要求级数绝对收敛,若不绝对收敛,则E(X)不存在) 如果有绝对收敛,则有 ,其中 连续型随机变量的数学期望 (这里要求绝对收敛 ...

  9. R语言:求二维变量数学期望

    想做一个二维变量数学期望实验, 查看若干资料终于找到方法 先看这篇文章熟悉一下R的函数 http://www.cyclismo.org/tutorial/R/tables.html 构造数据 通过下面 ...

  10. hdu 5419(数学期望)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5419 题解: 首先分母是C(m,3),考虑如何求出分子 考虑数学期望的独立性,我们首先可以用线性的时间 ...

最新文章

  1. 关于AI,腾讯又有大动作!开发者该如何应对?
  2. python使用heapq快速查找最大或最小的 N 个元素
  3. 国产系统安装安卓应用教程
  4. 一个线性几何不等式猜想
  5. 开源Java反编译工具
  6. 在一个list中增加一个节点
  7. CV和NLP中的无监督预训练(生成式BERT/iGPT和判别式SimCLR/SimCSE)
  8. [Apple开发者帐户帮助]七、注册设备(3)禁用或启用设备
  9. STM32工作笔记0067---SPI接口原理与配置
  10. IO流 Buffered 综合练习
  11. 伏羲六十四卦+36D
  12. 微信获取open ID
  13. 苹果笔记本计算机管理员删除,如何删除一个管理员?
  14. 运维管理系统,效果稳定、可靠运行
  15. Android Lollipop 5.0 经典新特性回顾
  16. matlab实用教程第2版 答案,MATLAB实用教程(第2版)
  17. 60吨反渗透+混床程序 西门子200 smart 编写程序,西门子smart line触摸屏上位机组态
  18. COMTRADE录波文件格式定义
  19. spire doc for java 设置word中图片大小
  20. Solidity 中的数学(第 4 部分:复利)

热门文章

  1. 贝尔曼算法队列优化(SPFA)
  2. Java selenium 爬取 星图
  3. 使用Linux命令cURL实现文件定时上传到ftp服务器的程序
  4. java list最后一个元素_Java实现寻找列表List中最后一个元素
  5. 火车头采集ajax网址的技巧,使用post方法获得采集网址
  6. 如何提升产品经理的综合素质?
  7. 结合 服务器+后端+前端,完成 vue项目 后台管理系统
  8. Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法
  9. 《迅雷链精品课》第一课:认识区块链
  10. android 图片轮播组件,Android客户端实现图片轮播控件