update 9.20:本篇题解已经被\(yyb\)证明是出锅的

这道题目最后的式子看上去是很简单的,不到10行就码完了,但是求式子的过程并没有那么简单。

很容易想到一种枚举思路:

因为每一段连续的1都有一个结束位置,我们从左到右枚举这个结束位置,

再枚举在这个位置结束的连续的1的长度,最后把贡献加入答案。

用式子写出来就是:

\[\sum_{i=1}^{n}\sum_{j=1}^{i}p_{i,j}j^3
\]

其中\(p_{i,j}\)表示结束位置为\(i\)的连续1串,其长度为\(j\)的概率

\(p_{i,j}\)可以预处理,这样做是\(O(n^2)\)的

如何做到\(O(n)\)?考虑差分

我们先从一个简单的问题开始

现在你有一个取值为\([1,a]\)的整数随机数\(x\),它取\(i(1\le i\le a)\)的几率为\(p_i\),求\(E(x)\)

注意这里的\(p\)和前面的有所不同

根据数学知识我们知道\(E(x)=\sum_{i=1}^{a}i\times p_i\)

现在我们把这个求和式子做一下变换:

\[\sum_{i=1}^{a}i\times p_i=\sum_{i=1}^{a}\sum_{j=1}^{i}p_i=\sum_{i=1}^{a}\sum_{j=i}^{a}p_j
\]

第一个等号显然

第二个等号交换了一下求和的顺序(如果不知道为什么的可以手画一下\(a\)较小的情况)

我们记\(\sum_{j=i}^{a}p_j=f_i\),它表示随机数的取值\(\ge i\)的概率

于是我们现在得到了另一个公式:

\[E(x)=\sum_{i=1}^{a}i\times p_i=\sum_{i=1}^{a}f_i
\]

从另一个角度理解这个式子:

当\(a=1\)时,显然\(E(x)=f_1=p_1\)

当\(a=2\)时,我们如果继续使用\(f_1=p_1+p_2\)作为答案,会发现我们把\(x=2\)对答案的贡献给算少了;

本来应该是\(2\times p_2\),我们的原答案\((f_1)\)里只有一个\(p_2\)

因此我们还要加上一个\(f_2\),即\(f_1+f_2\)

当\(a=3\)时,我们如果继续使用\(f_1+f_2=p_1+2p_2+2p_3\)作为答案,

会发现我们把\(x=3\)对答案的贡献给算少了;

本来应该是\(3\times p_3\),我们的原答案\((f_1+f_2)\)里只有两个\(p_3\)

因此我们还要加上一个\(f_3\),即\(f_1+f_2+f_3\)

故每当\(x\)的可能取值范围扩大后,我们就需要对于原来我们给出的期望进行补足

回到这道题,我们要算的是\(\sum_{i=1}^{n}\sum_{j=1}^{i}p_{i,j}j^3\)

这里的\(p\)是前面的\(p_{i,j}\)

我们可以换成求\(f_{i,j}\),它表示结束位置为\(i\)的连续1串,其长度\(\ge j\)的概率

如果我们只要算\(\sum_{i=1}^{n}\sum_{j=1}^{i}p_{i,j}j\)(没有了立方)

那么答案变成\(\sum_{i=1}^{n}\sum_{j=1}^{i}f_{i,j}\)

而这里的\(f_{i,j}\)非常好求,就是\(\prod_{k=i-j+1}^{i}s_k\),

\(s_k\)表示第\(k\)个位置为\(1\)的概率

因为只要\((i-j+1)\)到\(i\)的位置全部为\(1\),那么连续1串的长度一定\(\ge j\)

如果我们记\(x_i=\sum_{j=1}^{i}f_{i,j}\),那么递推式就是

\[x_i=p_ix_{i-1}+p_i
\]

这就是大家喜闻乐见的第一个递推式

但是我们现在要算\(Ans=\sum_{i=1}^{n}\sum_{j=1}^{i}p_{i,j}j^3\)

使用前面的补足思想,当\(x=i+1\)的时候,\(x^3\)需要对之前补足的贡献是\((3i^2+3i+1)\)

因此

\[Ans=\sum_{i=1}^{n}\sum_{j=1}^{i}p_{i,j}j^3=\sum_{i=1}^{n}\sum_{j=1}^{i}[3(j-1)^2+3(j-1)+1]f_{i,j}
\]

首先记\(y_i=\sum_{j=1}^{i}j^2p_{i,j}=\sum_{j=1}^{i}[2\times (j-1)+1]f_{i,j}\),

由于\(y_{i-1}\times p_i=\sum_{j=1}^{i-1}[2\times (j-1)+1]f_{i-1,j}\times p_i=\sum_{j=2}^{i}[2\times (j-2)+1]f_{i,j}\),

故\(y_i-y_{i-1}\times p_i=\sum_{j=2}^{i}2f_{i,j}+f_{i,1}=2x_{i-1}p_i+p_i\)

因此\(y_i\)的递推式为

\[y_i=(y_{i-1}+2\times x_{i-1}+1)\times p_i
\]

这就是大家喜闻乐见的第二个递推式

这样我们可以推到次数为\(3\)的情况,

记\(dis_i=\sum_{j=1}^{i}p_{i,j}j^3=\sum_{j=1}^{i}f_{i,j}(3j^2+3j+1)\),

仿照\(y_i\)的方法我们有大家喜闻乐见的第三个递推式

\[dis_i=(dis_{i-1}+3\times y_{i-1}+3\times x_{i-1}+1)\times p_i
\]

使用这三个递推式即可解决问题

虽然这三个递推式并不好理解

但难道我们只是为了\(AC\)数而做题的吗?

#include<bits/stdc++.h>
using namespace std;
int n;dd a[N],x[N],y[N],dis[N];
int main()
{
n=read();
for(RG int i=1;i<=n;i++){
scanf("%lf",&a[i]);
x[i]=(x[i-1]+1)*a[i];
y[i]=(y[i-1]+2*x[i-1]+1)*a[i];
dis[i]=dis[i-1]+(3*y[i-1]+3*x[i-1]+1)*a[i];
}
printf("%.1lf\n",dis[n]);
return 0;
}

[luogu1654]OSU!的更多相关文章

  1. 2014 Asia AnShan Regional Contest --- HDU 5078 Osu!

    Osu! Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=5078 Mean: 略. analyse: 签到题,直接扫一遍就得答 ...

  2. UVALive 7270 Osu! Master (阅读理解题)

    题目:传送门. 题意:阅读理解题,是一个osu的游戏,问得分.把题目翻译过来就是如果出现S或者BC后面跟的是1,ans就加1. #include <iostream> #include & ...

  3. Codeforces Round #146 (Div. 1) B. Let's Play Osu! dp

    B. Let's Play Osu! 题目连接: http://www.codeforces.com/contest/235/problem/B Description You're playing ...

  4. BZOJ 4318: OSU! 期望DP

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

  5. codeforces 235 B. Let's Play Osu!

    You're playing a game called Osu! Here's a simplified version of it. There are n clicks in a game. F ...

  6. bzoj4318: OSU!&&CF235BLet's Play Osu!

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4318 4318: OSU! Time Limit: 2 Sec  Memory Limit ...

  7. Tsinsen-A1490 osu! 【数学期望】

    问题描述 osu!是一个基于<押忍!战斗!应援团><精英节拍特工><太鼓达人>等各种音乐游戏做成的一款独特的PC版音乐游戏.游戏中,玩家需要根据音乐的节奏,通过鼠标 ...

  8. bzoj-4318 OSU! 【数学期望】

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

  9. hdu 5078 Osu! (2014 acm 亚洲区域赛鞍山 I)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5078 Osu! Time Limit: 2000/1000 MS (Java/Others)     ...

随机推荐

  1. SpringBoot学习:整合shiro(rememberMe记住我后自动登录session失效解决办法)

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 定义一个拦截器,判断用户是通过记住我登录时,查询数据库后台自动登录,同时把用户放入ses ...

  2. Spring缓存穿透问题修复

    本文来自网易云社区. 本剧情纯属真实,犹如雷同实乃缘分. 发生 事情的发生在某天早上,天气怎样反正是忘了,只记得当时监控平台大量的数据库错误报警. 作为后端开发,当看到日志中大量的db连接获取失败,心 ...

  3. Unity编辑器 - 输入控件聚焦问题

    Unity编辑器整理 - 输入控件聚焦问题 EditorGUI的输入控件在聚焦后,如果在其他地方改变值,聚焦的框不会更新,而且无法取消聚焦,如下图: 在代码中取消控件的聚焦 取消聚焦的"时机 ...

  4. 【xmlHttp_Class 远程访问类】使用说明

    类名:xmlHttp_Class 说明:远程获取外部网站数据信息或执行一个外部网站程序 目录: 类型 名称 参数 返回 说明 属性 [必需] [xmlHttp].url = [urlString] - ...

  5. 开源自动驾驶仿真平台 AirSim (2) - 编译 AirSim

    AirSim 的官方 Github: https://github.com/Microsoft/AirSim 对于 Unreal Engine 来说,AirSim 其实是作为一个插件存在,说白了就是把 ...

  6. 脚本 script 常用脚本

    目录 remove_all_pyc find_all_links rename_with_slice load_json_without_dupes execution_time benchmark_ ...

  7. tomcat 运行机制

    先不去关技术细节,对一个servlet容器,我觉得它首先要做以下事情:1:实现Servlet api规范.这是最基础的一个实现,servlet api大部分都是接口规范.如request.respon ...

  8. Thunder团队第三周 - Scrum会议6

    Scrum会议6 小组名称:Thunder 项目名称:i阅app Scrum Master:宋雨 工作照片: 代秋彤照相,所以图片中没有该同学. 参会成员: 王航:http://www.cnblogs ...

  9. postmortem report of period M2

    一.设想和目标 1.我们的软件主要要解决学长设计的学霸系统中视频及文档的浏览功能问题. 2.时间相对充裕.不过对于我们这些零基础的人来说还是比较困难. 3.我们团队中不同意见通常会进行进一步讨论,说出 ...

  10. Android 上实现非root的 Traceroute -- 非Root权限下移植可执行二进制文件 脚本文件

    作者 : 万境绝尘 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/36438365 示例代码下载 : -- CSDN : htt ...