首页 > 其他分享 >CodeForces - 236D Let's Play Osu!

CodeForces - 236D Let's Play Osu!

时间:2023-02-07 18:35:07浏览次数:40  
标签:Play 12 22 236D Osu play score fi pi


D. Let's Play Osu!

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

You're playing a game called Osu! Here's a simplified version of it. There are n clicks in a game. For each click there are two outcomes: correct or bad. Let us denote correct as "O", bad as "X", then the whole play can be encoded as a sequence of n characters "O" and "X".

Using the play sequence you can calculate the score for the play as follows: for every maximal consecutive "O"s block, add the square of its length (the number of characters "O") to the score. For example, if your play can be encoded as "OOXOOOXXOO", then there's three maximal consecutive "O"s block "OO", "OOO", "OO", so your score will be 22 + 32 + 22 = 17. If there are no correct clicks in a play then the score for the play equals to 0.

You know that the probability to click the i-th (1 ≤ i ≤ n) click correctly is pi. In other words, the i-th character in the play sequence has piprobability to be "O", 1 - pi to be "X". You task is to calculate the expected score for your play.

Input

The first line contains an integer n (1 ≤ n ≤ 105) — the number of clicks. The second line contains n space-separated real numbers p1, p2, ..., pn (0 ≤ pi ≤ 1).

There will be at most six digits after the decimal point in the given pi.

Output

Print a single real number — the expected score for your play. Your answer will be considered correct if its absolute or relative error does not exceed 10 - 6.

Examples

input

Copy

3
0.5 0.5 0.5

output

Copy

2.750000000000000

input

Copy

4
0.7 0.2 0.1 0.9

output

Copy

2.489200000000000

input

Copy

5
1 1 1 1 1

output

Copy

25.000000000000000

Note

For the first example. There are 8 possible outcomes. Each has a probability of 0.125.

  • "OOO"  →  32 = 9;
  • "OOX"  →  22 = 4;
  • "OXO"  →  12 + 12 = 2;
  • "OXX"  →  12 = 1;
  • "XOO"  →  22 = 4;
  • "XOX"  →  12 = 1;
  • "XXO"  →  12 = 1;
  • "XXX"  →  0.

So the expected score is 

CodeForces - 236D    Let

 

题意:

n个位置,每个位置有pi的概率点击成功,连续的x次成功将会被计分为x2,问总得分的期望?

分析:

来自:

CodeForces - 236D    Let

f[i]表示到第i个位置的期望得分

f[i]=f[i-1]*(1-pi)+(f[i-1]-q[i-1]^2+(q[i-1]+1)^2)*pi

然后fi是第i点得分期望。

fi=fi-1*(1-p)即当前不是O的得分期望。

然后fi+=f[i-1]*p当前是O的得分期望。

然后fi-=g[i-1]^2*p减去重复的得分期望。

然后fi+=(g[i-1]+1)^2*p。

 

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define MAXN 100005
using namespace std;
int n;
double p,f[MAXN],g[MAXN];
int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
{
scanf("%lf",&p);
g[i]=(g[i-1]+1)*p;
f[i]=f[i-1]*(1-p);
f[i]+=(f[i-1]-g[i-1]*g[i-1]+(1+g[i-1])*(1+g[i-1]))*p;
}
printf("%.10lf\n",f[n]);
}
return 0;
}

 

标签:Play,12,22,236D,Osu,play,score,fi,pi
From: https://blog.51cto.com/u_14932227/6042627

相关文章