0
点赞
收藏
分享

微信扫一扫

HDU 5753 Permutation Bo

小编 2022-11-09 阅读 32


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;
}



举报

相关推荐

0 条评论