题解 CF235B 【Let's Play Osu!】
CF235B Let's Play Osu!解题报告:
更好的阅读体验
题意
题意:给定一个序列,每一个位置
分析
很容易发现这是一道概率dp。
我们考虑以
故
我们求得了位置
首先,在这个极长
- 若当前位置为
1 ,概率为p_i ,则在i-1 位置时,期望长度为len_{i-1} ,则期望贡献为len_{i-1}^2 ;在i 位置时,期望长度为len_{i-1}+1 ,则期望贡献为(len_{i-1}+1)^2=len_{i-1}^2+2len_{i-1}+1 。这两个式子相减则为答案:len_{i-1}^2+2len_{i-1}+1-len_{i-1}^2=2len_{i-1}+1 ; - 若当前位置为
0 ,概率为1-p_i ,则无以i 结尾的极长1 序列,无贡献。
故
代码
记得保留
#include<stdio.h>
const int maxn=100005;
int i,j,k,m,n;
double len[maxn],ans[maxn];
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++){
double p;
scanf("%lf",&p);
len[i]=(len[i-1]+1.0)*p+0.0*(1-p);
ans[i]=ans[i-1]+(2.0*len[i-1]+1.0)*p+0.0*(1-p);
}
printf("%.15lf",ans[n]);
return 0;
}
后话
本题弱化版:P1365 WJMZBMR打osu! / Easy 本题扩展版:P1654 OSU!