惨痛教训: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
你永远不知道数据具体会换行几次!!!