YBTOJ 期望分数【第31章 期望问题】

【例题2】期望分数

惨痛教训:ch=getchar()能读换行,所以下面这种情况就。。。

#include
using namespace std;
int n;
double dp[500010][2];
int main()
{
	scanf("%d\n",&n);//!!!!!!!加\n
	dp[0][0]=dp[0][1]=0.0;
	for(int i=1;i<=n;i++)
	{
		char ch=getchar();
		switch(ch)
		{
			case 'o':
				dp[i][0]=dp[i-1][0]+1.0;
				dp[i][1]=dp[i-1][1]+dp[i-1][0]*2.0+1.0;
				break;
			case 'x':
				dp[i][0]=0;
				dp[i][1]=dp[i-1][1];
				break;
			case '?':
				dp[i][0]=(dp[i-1][0]+1.0)/2.0;		
				dp[i][1]=dp[i-1][1]+(dp[i-1][0]*2.0+1.0)/2.0; 
				break;
		}
	}
	printf("%.4lf",dp[n][1]);
	return 0;
}

update8.31:

以后再也不要在非快读的地方用getcharQwQ

你永远不知道数据具体会换行几次!!!

你可能感兴趣的:(常见错误,算法,c++,动态规划)