Codeforces 235B Let's Play Osu!
题目大意
现在有一个长度为n的只有ox组成的字符串。第i个位置上有pi的概率出现o,(1-pi)的概率出现x,如果有一段长度为L的全是o的部分,贡献就是L^2。求最后贡献的期望。
题解
这题有点思博啊……首先我们对于一个确定的串,从前往后扫,设当前o的长度为L,如果下一个是o的话,那么贡献就会增加(L+1)^2-L^2=2L+1.这样的话从前往后扫,我们维护两个值,一个是当前期望的o的长度now,一个是期望贡献ans,这样ans+=(2*now+1)*pi,now=(now+1)*pi
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cstdlib> 5 #include<cstring> 6 using namespace std; 7 int n; 8 double p,now,ans; 9 int main() 10 { 11 ans=0.0;now=0.0; 12 scanf("%d",&n); 13 for(int i=1;i<=n;i++) 14 { 15 cin>>p; 16 ans+=(2*now+1)*p;now=(now+1)*p; 17 } 18 printf("%.10f",ans); 19 return 0; 20 }