洛谷题单指南-概率与统计-P1365 WJMZBMR打osu! / Easy

原题链接:https://www.luogu.com.cn/problem/P1365

题意解读:连续k个o得分k2,求总得分期望。

解题思路:

这道题是P1654 OSU!的低配版

设a[i]表示第i个字符,E[i]表示前i个字符的得分期望,L[i]表示前一个字符后缀是o长度的期望

如果a[i] == 'o',L[i] = L[i-1] + 1,E[i] = E[i-1] + 2*L[i-1] + 1

如果a[i] == 'x',L[i] = 0,E[i] = E[i-1]

如果a[i] == '?',L[i] = 0.5 * (L[i-1] + 1),E[i] = E[i-1] + 0.5 * (2*L[i-1] + 1)

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 300005;
double E[N], L[N];
string a;
int n;

int main()
{
    cin >> n >> a;
    a = " " + a;
    for(int i = 1; i <= n; i++)
    {
        if(a[i] == 'o') L[i] = L[i-1] + 1, E[i] = E[i-1] + 2 * L[i-1] + 1;
        else if(a[i] == 'x') L[i] = 0, E[i] = E[i-1];
        else L[i] = 0.5 * (L[i-1] + 1), E[i] = E[i-1] + 0.5 * (2 * L[i-1] + 1);
    }
    printf("%.4lf", E[n]);
    return 0;
}

 

posted @ 2026-01-07 16:44  hackerchef  阅读(21)  评论(0)    收藏  举报