WJMZBMR打osu! / Easy

题目链接:WJMZBMR打osu! / Easy


dp[i] 为以 i 结尾的答案,cnt[i] 为以 i 结尾的连续 o 的期望个数。

然后当遇到 ‘?’ 时,考虑两种转移合并即可。

然后,这个数组可以滚动优化。


AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include
//#define int long long
using namespace std;
const int N=3e5+10;
int n; double dp,cnt; char str[N];
signed main(){
     
	scanf("%d %s",&n,str+1);
	for(int i=1;i<=n;i++){
     
		if(str[i]=='o') dp=dp+2*cnt+1,cnt++;
		else if(str[i]=='x') cnt=0;
		else dp=(dp*2+2*cnt+1)/2.0,cnt=(cnt+1)/2.0;
	}
	printf("%.4lf\n",dp);
	return 0;
}

你可能感兴趣的:(动态规划,概率dp)