Link
题目
Sample-input
4
????
Sample-output
4.1250
思路
是看着这个做的xx。
然后这里期望
设f[i]为完成第i个点击时期望的分数:
如果c=‘x’,分数不变,继承f[i-1]
如果c=’o’,总共增加的分数=连击数2
如果c=’?‘,~~(开始搞期望?)~~那么
f[i] = x的情况所能得到的分数50%+o的情况所能得到的分数50%。
但是连击数不能按照o统计,根据折算,累计=(累计+1)/2;
Code
#include<cstdio>
int n;
char c;
double f[1000001],lj;
int main(){
scanf("%d",&n);
c = getchar();
while(c!='?'&&c!='o'&&c!='x') c = getchar(); //读入
for(int i = 1; i <= n; ++i){
if(c == 'x'){
f[i] = f[i-1]; //继承
lj = 0;
}
else if(c == 'o'){
f[i] = f[i-1]-lj*lj+(lj+1)*(lj+1); //计算连击平方
++lj;
}
else{
f[i] = f[i-1]/2.0+(f[i-1]-lj*lj+(lj+1)*(lj+1))/2.0; //相加*0.5
lj = (lj+1)/2.0; //折算
}
c = getchar();
}
printf("%.4f",f[n]);
}