[luogu1654]OSU!
update 9.20:本篇题解已经被\(yyb\)证明是出锅的
这道题目最后的式子看上去是很简单的,不到10行就码完了,但是求式子的过程并没有那么简单。
很容易想到一种枚举思路:
因为每一段连续的1都有一个结束位置,我们从左到右枚举这个结束位置,
再枚举在这个位置结束的连续的1的长度,最后把贡献加入答案。
用式子写出来就是:
\]
其中\(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\)
现在我们把这个求和式子做一下变换:
\]
第一个等号显然
第二个等号交换了一下求和的顺序(如果不知道为什么的可以手画一下\(a\)较小的情况)
我们记\(\sum_{j=i}^{a}p_j=f_i\),它表示随机数的取值\(\ge 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}\),那么递推式就是
\]
这就是大家喜闻乐见的第一个递推式
但是我们现在要算\(Ans=\sum_{i=1}^{n}\sum_{j=1}^{i}p_{i,j}j^3\)
使用前面的补足思想,当\(x=i+1\)的时候,\(x^3\)需要对之前补足的贡献是\((3i^2+3i+1)\)
因此
\]
首先记\(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\)的递推式为
\]
这就是大家喜闻乐见的第二个递推式
这样我们可以推到次数为\(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\)的方法我们有大家喜闻乐见的第三个递推式
\]
使用这三个递推式即可解决问题
虽然这三个递推式并不好理解
但难道我们只是为了\(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!的更多相关文章
- 2014 Asia AnShan Regional Contest --- HDU 5078 Osu!
Osu! Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5078 Mean: 略. analyse: 签到题,直接扫一遍就得答 ...
- UVALive 7270 Osu! Master (阅读理解题)
题目:传送门. 题意:阅读理解题,是一个osu的游戏,问得分.把题目翻译过来就是如果出现S或者BC后面跟的是1,ans就加1. #include <iostream> #include & ...
- 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 ...
- BZOJ 4318: OSU! 期望DP
4318: OSU! 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4318 Description osu 是一款群众喜闻乐见的休闲软件 ...
- 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 ...
- bzoj4318: OSU!&&CF235BLet's Play Osu!
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4318 4318: OSU! Time Limit: 2 Sec Memory Limit ...
- Tsinsen-A1490 osu! 【数学期望】
问题描述 osu!是一个基于<押忍!战斗!应援团><精英节拍特工><太鼓达人>等各种音乐游戏做成的一款独特的PC版音乐游戏.游戏中,玩家需要根据音乐的节奏,通过鼠标 ...
- bzoj-4318 OSU! 【数学期望】
Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1 ...
- hdu 5078 Osu! (2014 acm 亚洲区域赛鞍山 I)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5078 Osu! Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- sql server 对Geography 的增(insert)和查询(select)
insert: Location为 Geography类型 INSERT INTO [oss1].[dbo].[Order] ([Location]) VAL ...
- PS 拉伸大长腿
1.打开一个图片工具栏--图像--画布大小 2.选择矩形选框工具--框住要拉升退的位置--然后在按Ctrl+T,进行拉伸即可
- hdu1874畅通工程续(floyd)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- Linux命令应用大词典-第18章 磁盘分区
18.1 fdisk:分区表管理 18.2 parted:分区维护程序 18.3 cfdisk:基于磁盘进行分区操作 18.4 partx:告诉内核关于磁盘上分区的号码 18.5 sfdisk:用于L ...
- 【WXS数据类型】RegExp
生成 regexp 对象需要使用 getRegExp函数,注意与JS的使用方法不同( new RegExp(pattern,modifiers);) 原型:getRegExp(pattern, mod ...
- leetcode-打家劫舍(动态规划)
你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个代表每 ...
- [Clr via C#读书笔记]Cp14字符字符串和文本处理
Cp14字符字符串和文本处理 字符 System.Char结构,2个字节的Unicode,提供了大量的静态方法:可以直接强制转换成数值: 字符串 使用最频繁的类型:不可变:引用类型,在堆上分配,但是使 ...
- ubuntu samba配置注意事项
1. 下载samba前, ubuntu镜像源需要更新为国内源,否则samba的安装会非常慢 亲测,清华的镜像源速度满足要求. A.登录 https://mirrors.tuna.tsinghua.ed ...
- wamp下安装https 实现 ssl 协议,主要是编写小程序通讯
也不知道腾讯为啥要这个限制,是想卖他的服务器资源么 简单几句话 1 wamp3.0.X的版本不行,我折腾了一天半,放弃了,换成wamp2.5 一次通过 2 证书 去腾讯云申请,单独域名的可以申请免费的 ...
- POJ 2987 Firing(最大流最小割の最大权闭合图)
Description You’ve finally got mad at “the world’s most stupid” employees of yours and decided to do ...