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 >> ;
  14. const i64 INF = ~0ULL >> ;
  15. //***************************************
  16. int main() {
  17. int n;
  18. scanf("%d", &n);
  19. double ans(), l(), l2(), p;
  20. rep(i, , n) {
  21. scanf("%lf", &p);
  22. ans += p * ( * l2 + * l + );
  23. l2 = p * (l2 + * l + );
  24. l = p * (l + );
  25. }
  26. printf("%.1lf\n", ans);
  27. return ;
  28. }

bzoj-4318 OSU! 【数学期望】的更多相关文章

  1. bzoj 4318 OSU 概率期望dp

    可以发现:f[i]转移到f[i+1]只和最后一串1的长度和平方有关, 因为如果新加的位置是1,贡献就是(x+1)^3-x^3=3x^2+3x+1,否则为0: 所以对于每一个位置,处理出期望的f,x和x ...

  2. bzoj 4318: OSU!【期望dp】

    思路有点眼熟啊,就是设l1记录长为x的极长全1串贡献x的答案,l2记录长为x的极长全1串贡献x^2的答案,f记录真正的答案 转移的话根据n-(n-1)=1,n^2-(n-1)^2=2n-1,n^3-( ...

  3. BZOJ 4318: OSU! 期望DP

    4318: OSU! 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4318 Description osu 是一款群众喜闻乐见的休闲软件 ...

  4. 【BZOJ】4318: OSU!【期望DP】

    4318: OSU! Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 1473  Solved: 1174[Submit][Status][Discuss ...

  5. ●BZOJ 4318 OSU!

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4318题解: 期望dp 如果我们能够得到以每个位置结尾形成的连续1的长度的相关期望,那么问题就 ...

  6. bzoj 4318 OSU! - 动态规划 - 概率与期望

    Description osu 是一款群众喜闻乐见的休闲软件.  我们可以把osu的规则简化与改编成以下的样子:  一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1 ...

  7. BZOJ - 4318: OSU! (期望DP&Attention)

    Description osu 是一款群众喜闻乐见的休闲软件.  我们可以把osu的规则简化与改编成以下的样子:  一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1 ...

  8. BZOJ 4318: OSU! 期望概率dp && 【BZOJ3450】【Tyvj1952】Easy 概率DP

    这两道题是一样的...... 我就说一下较难的那个 OSU!: 这道15行的水题我竟然做了两节课...... 若是f[i][0]=(1-p)*f[i-1][0]+(1-p)*f[i-1][1],f[i ...

  9. bzoj 4318 OSU! —— 期望DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4318 期望DP,因为平方的期望不等于期望的平方,所以用公式递推: 第一次推错了囧,还是看这位 ...

  10. BZOJ 4318 OSU! ——期望DP

    这次要求$x^3$的概率和. 直接维护三个值$x$ $x^2$ $x^3$的期望. 概率的平方不等于平方的概率. #include <map> #include <ctime> ...

随机推荐

  1. [转]Linux挂载点介绍及桌面服务器分区方案

    原链接:http://www.metsky.com/archives/255.html 本文介绍Linux常用分区挂载点常识以及桌面.服务器分区挂载点的推荐配置,当然这个配置是天缘自己写的,分区大小这 ...

  2. ACM暑期训练总结

    ACM暑期集训总结报告 不知不觉,ACM暑期集训已经过去了一个月了(其实我还差几天才够一个月,因为最后几天要回家办助学贷款,所以没坚持到最后,当了个逃兵.....[汗])也到了结束的时候.在这一个月中 ...

  3. 如何在Eclipse中添加Servlet-api.jar的方法

    方法一: 点击窗口->首选项->java->构建路径->类路径变量->新建:将你的tomcat目录下的common/lib/servlet.jar加进来.如果你建立了一个 ...

  4. Django -- static

    和templates一样,Django会自动去各个app根目录中寻找叫static的目录,在该目录下创建一个和app同名的目录,用于存放静态文件(js, css. images...) 使用时,只需要 ...

  5. Problem H: 小火山的围棋梦想 多校训练2(小火山专场)

    题目链接:http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1908 题意:如果'.'被'*'围起来,就把'.'变为'*'. 分析:如果是'*'直接输出, ...

  6. Vsftp配置都没有问题 连接不上 530 Login incorrect 解决方法

    客户端输入正确的用户名和密码之后,却一直显示:530 Login incorrectLogin Failed后来发现在etc下面有个pam.d文件夹进去打开vsftpd这个文件, 发现里面对之前的用户 ...

  7. Java 错误:找不到或无法加载主类

    环境变量的配置有问题,你改改吧:HOME是 D:\Java\jdk1.8.0_11 Path是 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin CLASSPATH是 .;%JA ...

  8. vpn探测

    root@bt:~# ike-scan -M -v 192.168.1.102 root@bt:~# sslscan 192.168.1.102

  9. uboot1.1.6之NOR FLASH 出现的问题解决方法

    U-BOOT移植,structure has no member named `CAMDIVN speed.c: In function `get_HCLK':speed.c:114: error: ...

  10. VPN工作原理

    引言 在过去几十年中,世界发生了很大的变化.现在很多公司除了处理本地或地区性事务外,还要考虑全球市场和物流的问题.很多公司在全国甚至全球都设有分支机构,而这些公司都需要做的一件事情就是:找到能够与分公 ...