zoukankan      html  css  js  c++  java
  • 【ybtoj】【期望问题】期望得分

    题意

    image

    题解

    刚接触期望问题,很容易想到 (f(i,j)) 表示前 (i) 个字符,最后有 (j) 个连续的 o 的期望得分。
    不过这样还要记录 (p_j) 表示当前末尾出现连续 (j) 个字符的概率,且 (f) 为两维显然空间不足。
    所以要充分利用期望的性质:可加性,可乘性。
    重新考虑的时候想到连续 (x) 个 o 之后再加上一个 o ,对答案的贡献为 ((x+1)^2-x^2=2x+1).
    (p) 数组舍去,直接记录当前末尾 o 的期望长度,就可以直接转移。
    代码非常简短。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int INF = 0x3f3f3f3f,N = 3e5+10;
    inline ll read()
    {
    	ll ret=0;char ch=' ',c=getchar();
    	while(!(c>='0'&&c<='9')) ch=c,c=getchar();
    	while(c>='0'&&c<='9') ret=(ret<<1)+(ret<<3)+c-'0',c=getchar();
    	return ch=='-'?-ret:ret;
    }
    int n;
    char s[N];
    double elen,ans; 
    int main()
    {
    	n=read();
    	scanf("%s",s+1);
    	for(int i=1;i<=n;i++) 
    	{
    		if(s[i]=='o') ans+=2*elen+1,elen++;
    		else if(s[i]=='x') elen=0;
    		else ans+=(2*elen+1)*0.5,elen=0.5*(elen+1); 
    	}
    	printf("%.4lf",ans);
    	return 0;
    }
    
  • 相关阅读:
    BZOJ 3991 set维护dfs序
    BZOJ 4547 矩阵快速幂
    WERTYU | TEX Quotes
    高精度运算
    最大公约数和最小公倍数
    老鼠的旅行
    数据交换
    1136 A Delayed Palindrome
    1137 Final Grading
    1138 Postorder Traversal
  • 原文地址:https://www.cnblogs.com/conprour/p/15308503.html
Copyright © 2011-2022 走看看