BZOJ3450:[Tyvj1952]Easy(概率DP)

来源:互联网 发布:php爬虫程序 编辑:程序博客网 时间:2024/06/07 18:02

传送门

题解:
将原问题转化:
L表示当前位置到离当前位置最近的x的长度
对于一个序列,每个○的贡献是2L+1.
每个x的贡献是0.
每个?的贡献分两种情况讨论一下就好了。

发现每个位置的期望L可以求出,由期望的线性性可以直接递推了。

#include<bits/stdc++.h>using namespace std;const int Maxn=3e5+50;const int lim=1e9; char ch[Maxn];int main(){    double l=0,ans=0;int n;    scanf("%d%s",&n,ch+1);    for(int i=1;i<=n;i++){        if(ch[i]=='o')ans+=2*l+1,++l;        else if(ch[i]=='x')l=0;        else ans+=(2*l+1)/2.0,l=(l+1)*0.5;    }    printf("%.4f",ans);}
原创粉丝点击