Problem Description
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).
Input
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).
Output
f(h).
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;
}