注意细节啊。。。
和上一道差不多。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 300500 using namespace std; int n; char s[maxn]; long double dp1[maxn],dp2[maxn]; int main() { scanf("%d\n%s",&n,s); for (int i=1;i<=n;i++) { if (s[i-1]=='o') {dp1[i]=dp1[i-1]+1;dp2[i]=dp2[i-1]+2*dp1[i-1]+1;} else if (s[i-1]=='x') {dp1[i]=0;dp2[i]=dp2[i-1];} else {dp1[i]=(dp1[i-1]+1)*0.5;dp2[i]=dp2[i-1]+(2*dp1[i-1]+1)*0.5;} } printf("%.4Lf\n",dp2[n]); return 0; }