codefrces 235B Let's Play Osu!


题目意思:在一个序列只有O,X,分数为每个O 连块长度的平方的和,输入每个位置出现O 的概率,求分数期望.

做法 参考: http://codeforces.com/blog/WJMZBMR

#include<stdio.h>
/*转化题目,变为找出i,j对数,其中i<j,并且i,j之间没有X,并计算出O的总数,最后的分数为O的总数+pair(i,j)的数量*/
//概率题尽量把概率值和权值分离
int main()
{
	double tem,pre=0.0,ans=0.0;
	int n;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%lf",&tem);pre*=tem;
		ans+=2*pre+tem;pre+=tem;
		/*pre是每一个i,j对形成的概率,这里j固定为当前位置,O的总数加一,所以考虑到到概率因素,最终直接加上tem		*/
	}
	printf("%.15lf\n",ans);
	return 0;
}

你可能感兴趣的:(codefrces 235B Let's Play Osu!)