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. COGS 2199. [HZOI 2016] 活动投票

    2199. [HZOI 2016] 活动投票 ★★   输入文件:hztp.in   输出文件:hztp.out   简单对比时间限制:0.5 s   内存限制:2 MB [题目描述] 衡中活动很多, ...

  2. 在hive中查询导入数据表时FAILED: SemanticException [Error 10096]: Dynamic partition strict mode requires at least one static partition column. To turn this off set hive.exec.dynamic.partition.mode=nonstrict

    当我们出现这种情况时 FAILED: SemanticException [Error 10096]: Dynamic partition strict mode requires at least ...

  3. 2019年猪年海报PSD模板-第八部分

    11套精美猪年海报,免费猪年海报,下载地址:百度网盘,https://pan.baidu.com/s/1Y3wc_r7O-Dp0mLCihJ9mtQ            

  4. 在VMware虚拟机下安装Linux CentOS7

    1.首先下载并安装VMware虚拟机,下载地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluatio ...

  5. Appium最新的服务器初始化参数(Capability)【截止11月29日,后续最新的可以看github】

    键 描述 值 automationName 自动化测试的引擎 Appium (默认)或者 Selendroid platformName 使用的手机操作系统 iOS, Android, 或者 Fire ...

  6. 第3章 TCP协议详解

    第3章 TCP协议详解 3.1 TCP服务的特点 传输协议主要有两个:TCP协议和UDP协议,TCP协议相对于UDP协议的特点是 面向连接使用TCP协议通信的双方必须先建立连接,完成数据交换后,通信双 ...

  7. ObjectMapper的使用

    Jackson ObjectMapper类 ObjectMapper类是Jackson库的主要类它提供一些功能将Java对象转换成JSON结构,反之亦然它使用JsonParser和JsonGenera ...

  8. 数据库Mysql的学习(一)-启动和进入

    数据库:按照数据结构来组织储存和管理数据的仓库. Mysql是关系型数据库管理系统 Mysql安装好之后... mysql的启动 1:通过控制面板里的”服务“找到mysql右键启动即可 2:开始菜单搜 ...

  9. 关于Filter中ServletRequest强转HttpServletRequest问题

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOE ...

  10. LeetCode 94 ——二叉树的中序遍历

    1. 题目 2. 解答 2.1. 递归法 定义一个存放树中数据的向量 data,从根节点开始,如果节点不为空,那么 递归得到其左子树的数据向量 temp,将 temp 合并到 data 中去 将当前节 ...