版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sugar_free_mint/article/details/86678545
题目
有
n次点击要做,成功了就是
o,失败了就是
x,分数是按
combo计算的,连续
a个
combo就有
a×a分,
combo就是极大的连续
o。有些地方
o或者
x各有
21的可能性,用
?号来表示。期望得分是多少
分析
那么首先设
f[n]表示到
n的总期望
combo,
g[n]表示到
n的连续一段
o的总长度,
那么就可以得到
-
s[n]=x,f[n]=f[n−1],g[n]=0
-
s[n]=o,f[n]=f[n−1]+2×g[n−1]+1,g[n]=g[n−1]+1(也就是说,用之前的combo,按完全平方公式拆开,加上的就是2倍长度+1,同时期望长度也要增加一)
-
s[n]=?,其实和o很类似,但是f[n]=f[n−1]+g[n−1]+0.5(后面两项有一半的概率),g[n]=(g[n−1]+1)÷2
代码
#include <cstdio>
#define rr register
using namespace std;
int n,p; double f[2],g[2];
signed main(){
for (scanf("%d",&n);n;--n){
rr char c=getchar(); p^=1;
while (c!='o'&&c!='x'&&c!='?') c=getchar();
if (c=='x') f[p]=f[p^1],g[p]=0;
else if (c=='o') f[p]=f[p^1]+2*g[p^1]+1,g[p]=g[p^1]+1;
else f[p]=f[p^1]+g[p^1]+0.5,g[p]=(g[p^1]+1)*0.5;
}
return !printf("%.4lf",f[p]);
}