题面

一序列\(a\), 对于每一个\(i\)均有\(a_i\)有\(p_i\)的几率为1, 否则为\(0\)

求: \(a\)中极长全\(1\)子序列长度三次方之和的期望

前置知识

  1. 基本期望(期望的概念总得会吧...
  2. 脑子

解法

可以设\(f(x)\)表示 操作是否成功序列 (以下简称序列\(a\))前\(x\)位以\(x\)结尾极长全\(1\)子序列长度的期望, \(g(x)\)表示\(a\)前\(x\)位以\(x\)结尾极长全\(1\)子序列长度平方的期望, \(r(x)\)表示\(a\)前\(x\)位以\(x\)结尾极长全\(1\)子序列长度三次方的期望(以下简称"期望"), \(h(x)\)表示\(a\)前\(x\)位极长全\(1\)子序列长度三次方之和的期望(即原题所求量)

为了叙述方便以下称原题给出的序列为\(p\)

由期望的定义\(E(x) = \sum v_ip_i\), 有

\[f(x) = (f(x-1)+1) \times p_i + 0 \times (1-p_i) = (f(x-1)+1) \times p_i
\]

同样有:

\[g(x) = (\sqrt{g(x-1)}+1)^2 \times p_i + 0 \times (1-p_i) \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;
\]

\[ = (g(x-1)+2f(x)+1)\times p_i(\text{由定义易知}g(x)=f^2(x))
\]

以及

\[r(x) = (r(x-1)+3g(x)+3f(x)+1)\times p_i
\]

然后有

\[h(x) = h(x-1) \times (1-p_i) + (h(x-1)+r(x)-r(x-1)) \times p_i
\]

这里稍微解释一下, 因为\(h(x)+r(x)\)包括了以\(x-1\)结尾的期望两次(\(h(x)\)包括了\([1, n-1]\)的期望, \(r(x)\)包括了\([lst, n]\)的期望(此处\(lst\)为以\(x-1\)(即\(x\), 因为开头不变)结尾的极长全\(1\)子序列的开头的期望)), 所以要减去\([lst, n-1]\)的期望, 即\(r(x-1)\)

展开原式得

\[h(x) = h(x-1) + (3g(x-1)+3f(x-1)+1) \times p_i
\]

(发现\(p\)完全没有用呢)

接下来暴力扫一遍序列\(p\)求出\(f, g, h\)即可, 时间复杂度为\(O(n)\)

萌新求通过qwq

Code

/*code by tyqtyq*/
#include<bits/stdc++.h>
#define f(i,x,y) for(register int i=x, i##end=y; i<=i##end; ++i)
#define d(i,x,y) for(register int i=y, i##end=x; i>=i##end; --i)
#define FO(x) {freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);}
using namespace std;
int read(int& x){x=0; int f=1, ch=getchar(); while(!isdigit(ch)) f=ch=='-'?-1:f, ch=getchar(); while(isdigit(ch)) x=x*10+ch-'0', ch=getchar(); return x*=f;}
int read(){int x=0, f=1, ch=getchar(); while(!isdigit(ch)) f=ch=='-'?-1:f, ch=getchar(); while(isdigit(ch)) x=x*10+ch-'0', ch=getchar(); return x*f;}
int max(int x, int y){return x>y?x:y;} int min(int x, int y){return x<y?x:y;}
#define _ 100005
#define read(X) scanf("%lf", &X)
#define print(X) printf("%.1lf\n", X)
double px1[_], px2[_], ans[_], a[_];
int n;
int main(){
scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%lf", &a[i]);
for(int i=1;i<=n;++i) {
px1[i]=(px1[i-1]+1)*a[i];
px2[i]=(px2[i-1]+2*px1[i-1]+1)*a[i];
ans[i]=ans[i-1]+(3*px2[i-1]+3*px1[i-1]+1)*a[i];
}
print(ans[n]);
return 0; //拜拜程序~
}

题解 P1654 【OSU!】的更多相关文章

  1. 洛谷 P1654 OSU! 解题报告

    P1654 OSU! 题目描述 osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有\(n\)次操作,每次操作只有成功与失败之分,成功对应\(1\),失败对应 ...

  2. P1654 OSU! 题解

    \(x\) 为该位置有 \(1\) 的期望. 统计两个值 : \(suma\) 和 \(sumb\). \(suma\) 表示连续 \(X\) 个 \(1\) , \(X\) 的平方的期望, \(su ...

  3. Luogu P1654 OSU!

    写法和CF235B Let's Play Osu!非常相似.但是这个题厉害就厉害在统计的贡献里面有一个平方的期望,而这个平方的期望和期望的平方是完全不一样的,需要另外统计,逻辑上仔细想一想就会明白. ...

  4. P1654 OSU!-洛谷luogu

    传送门 题目背景 原 <产品排序> 参见P2577 题目描述 osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败 ...

  5. bzoj 4318 || 洛谷P1654 OSU!

    https://www.lydsy.com/JudgeOnline/problem.php?id=4318 https://www.luogu.org/problemnew/show/P1654 看来 ...

  6. Luogu P1654 OSU! | 期望

    题目链接 很妙的一道题. 题目要求$X^3$的期望值. 直接求不好求. 考虑先求出$X$和$X^2$的期望值,然后再求$X^3$的期望值. 迎.刃.而.解. #include<iostream& ...

  7. p1654 OSU!

    期望DP 设\(g[i]\)表示前i个的连续1的期望长度,\(h[i]\)表示前i个连续1的长度的平方的期望,\(f[i]\)表示前i个的期望得分 由期望的线性性质,我们可以考虑统计新增一个对答案的贡 ...

  8. 洛谷P1654 OSU!_概率与期望

    Code: #include<cstdio> #include<algorithm> using namespace std; const int maxn = 1000000 ...

  9. LUOGU P1654 OSU! (概率期望)

    传送门 解题思路 首先考虑对于一个点来说,如果这个点是1的话,那么对于答案来说 $(ans+1)^3=ans^3+3*ans^2+3*ans+1$,这对于上一个答案来说其实贡献了 $3*ans^2+3 ...

随机推荐

  1. C# Chart 点击获取当前点击坐标和Series

    C# Chart 点击获取当前点击坐标和Series https://blog.csdn.net/wumuzhizi/article/details/47168989 2015年07月31日 13:5 ...

  2. Java8 使用LocalDate计算两个日期间隔多少年,多少月,多少天

    最近项目遇到一个需要计算两个日期间隔的期限,需要计算出,整年整月整日这样符合日常习惯的说法,利用之前的Date和Calendar类会有点复杂,刚好项目使用了JDK8,那就利用起来这个新特性,上代码: ...

  3. 006.Oracle数据库 , DISTINCT去掉重复项重复内容

    /*Oracle数据库查询日期在两者之间*/ SELECT DISTINCT OCCUR_DATE FROM LM_FAULT WHERE ( ( OCCUR_DATE >= to_date( ...

  4. 云服务器:西部数码VS阿里云

    公司因为业务的需要,申请了两个云服务器.一个是西部数码的,一个是阿里云香港的.其中西部数码的配置高一些,一年4500元左右:香港的则便宜些,一年2200左右.因为备案问题,主业务放在成都的西部数码服务 ...

  5. JuJu团队11月29号工作汇报

    JuJu团队11月29号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 于达  生成所有mini batch, 支持不同batch_size  优化代码  熟悉julia 婷婷 ...

  6. 《从Lucene到Elasticsearch全文检索实战》的P184页

    curl -XPOST "http://localhost:9200/_bulk?pretty" --data-binary @books.json 这句话在书中是以crul的命令 ...

  7. 使用Nginx搭建Tomcat9集群,Redis实现Session共享

    使用Nginx搭建Tomcat9集群,Redis实现Session共享 1.tomcat准备 首先准备两个tomcat9 ,修改配置文件server.xml 如果在多个服务器上分别启动tomcat 则 ...

  8. Java对象序列化输入输出

    在网上看到一篇有关于对象序列化的代码,自己仿着写了把 在Java中,entity通过implements Serializable,然后使用ObjectInputStream和ObjectOutput ...

  9. servlet 之 GenericServlet抽象类详解

    GenericSerlvet抽象类源码如下: package javax.servlet; import java.io.IOException; import java.util.Enumerati ...

  10. Maven的安装和创建项目的过程

    一.下载Maven包和配置环境变量 1.将下载好的maven包放到一个目录中:目录中不能有汉字和空格 2.配置环境变量 3.配置path路径 二.配置阿里云私服 1.找到setting目录,配置下载j ...