Problem Description
There are two sequences h1∼hn and c1∼cn. h1∼hn is
a permutation of 1∼n.
particularly, h0=hn+1=0.
We define the expression [condition] is 1 when condition is True,is 0 when condition is False.
Define the function f(h)=∑ni=1ci[hi>hi−1 and hi>hi+1]
Bo have gotten the value of c1∼cn, and he wants to know the expected value of f(h).
We define the expression [condition] is 1 when condition is True,is 0 when condition is False.
Define the function f(h)=∑ni=1ci[hi>hi−1 and hi>hi+1]
Bo have gotten the value of c1∼cn, and he wants to know the expected value of f(h).
Input
This problem has multi test cases(no more than 12).
For each test case, the first line contains a non-negative integer n(1≤n≤1000), second line contains n non-negative integer ci(0≤ci≤1000).
For each test case, the first line contains a non-negative integer n(1≤n≤1000), second line contains n non-negative integer ci(0≤ci≤1000).
Output
For each test cases print a decimal - the expectation of f(h).
If the absolute error between your answer and the standard answer is no more than 10−4, your solution will be accepted.
If the absolute error between your answer and the standard answer is no more than 10−4, your solution will be accepted.
Sample Input
4 3 2 4 5 5 3 5 99 32 12
Sample Output
6.000000 52.833333
算期望,反正只有边缘和中间两种,计算一下概率即可。
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<bitset>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
#define rep(i,j,k) for (int i = j; i <= k; i++)
#define per(i,j,k) for (int i = j; i >= k; i--)
using namespace std;
typedef long long LL;
const int low(int x) { return x&-x; }
const int mod = 1e9 + 7;
const int N = 1e3 + 10;
const int INF = 0x7FFFFFFF;
int T, n, c[N];
int f[N];
int main()
{
//scanf("%d", &T);
while (scanf("%d", &n) != EOF)
{
rep(i, 1, n) scanf("%d", &c[i]);
double ans = (c[1] + c[n]) / 2.0;
double res = 0;
rep(i, 3, n) res += (i - 1)*(i - 2);
((res /= n) /= n - 1) /= n - 2;
rep(i, 2, n - 1) ans += res*c[i];
printf("%.6lf\n", ans);
}
return 0;
}