[期望DP] WJMZBMR打osu! / Easy
题面
就是一道很正常的期望 \(DP\) 但是我太菜了不会打\kk
式子直接用长度平方推,推出来大力化简一下即可
代码:
# include <iostream>
# include <cstdio>
# include <string>
# define MAXN 300005
long double f[MAXN];
int main(){
int n; std::string s;
std::cin>>n>>s;
double len = 0;
for(int i = 1; i <= n; i++){
// if(s[i-1] == 'o'){ // 这个式子是假的,用没有推出的式子计算没有推出的结果
// len++;
// f[i] = f[i-1] + (2.00*len-1.00);
// }
// else if(s[i-1] == 'x'){
// len = 0;
// f[i] = f[i-1];
// }
// else if(s[i-1] == '?'){
// len = (len+1.00)*0.5;
// f[i] = f[i-1] + len - 0.5;
// }
if(s[i-1] == 'o'){
f[i] = f[i-1] + (2.00*len+1.00);
len++;
}
else if(s[i-1] == 'x'){
f[i] = f[i-1];
len = 0;
}
else if(s[i-1] == '?'){
f[i] = f[i-1] + len + 0.5;
len = (len + 1.00) * 0.5;
}
}
printf("%.4Lf", f[n]);
return 0;
}