bzoj3450 Tyvj1952 Easy

来源:互联网 发布:什么手机支持双频网络 编辑:程序博客网 时间:2024/06/10 01:25

题目

比较简单的一个期望递推,设当前连续o的期望为tmp,

则如果当前为x,tmp=0,对答案没有贡献。
如果当前为o,tmp++,对答案有tmp^2-(tmp-1)^2的贡献
如果当前为?,先对答案有((tmp+1)^2-tmp^2)的贡献,tmp=(tmp+1)/2。

按照这个规则,O(n)扫一遍就可以了。

#include<bits/stdc++.h>using namespace std;int n;char s[300005];double ans,tmp;int main(){    freopen("in.txt","r",stdin);    scanf("%d\n%s",&n,s);    for(int i=0;i<n;i++)        if(s[i]=='x')tmp=0.0;            else if(s[i]=='o')ans+=(++tmp)*2.0-1.0;                else ans+=(tmp*2+1)/2.0,tmp=(tmp+1)/2;    printf("%.4f",ans);    return 0;}
原创粉丝点击