点击这里查看原题
设l为当前期望长度,分为三种情况:
- 当前位为‘x’,l清零
- 当前位为‘o’,ans+=(l+1)^2-l^2,l++
- 当前位为‘?’,那么l可能变成l+1,也可能变成0,因此l的期望变为(l+1)/2,ans+=(2l+1)/2。
/*
User:Small
Language:C++
Problem No.:3450
*/
#include<bits/stdc++.h>
#define ll long long
#define inf 999999999
using namespace std;
double ans,l;
int n;
char c[300005];
int main(){
freopen("data.in","r",stdin);//
scanf("%d%s",&n,c);
for(int i=0;i<n;i++){
if(c[i]=='x') l=0;
else if(c[i]=='o') ans+=2*l+1,l++;
else ans+=(2*l+1)*0.5,l=(l+1)*0.5;
}
printf("%.4lf\n",ans);
return 0;
}

本文介绍了一种针对特定字符串模式的算法实现,通过分析字符数组,采用动态更新的方式计算字符串匹配的期望长度及其平方的期望值。该算法适用于处理包含三种特殊字符的字符串,并通过实例演示了如何使用C++进行编程实现。
2005

被折叠的 条评论
为什么被折叠?



