洛谷题单指南-概率与统计-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;
}
浙公网安备 33010602011771号