HDU 5753 Permutation Bo

Permutation Bo

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 485    Accepted Submission(s): 286
Special Judge


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=ci[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).
 

 

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.
 

 

Sample Input
4
3 2 4 5
5
3 5 99 32 12
 

 

Sample Output
6.000000
52.833333
 

 

Source
 
 
 
解析:根据题意,可以考虑每个位置对期望的贡献。当i不在排列两端的时候,有3! = 6种大小关系,其中有2种对期望有贡献,因此贡献为ci/3;当i在排列两端时,有2! = 2种大小关系,其中有1种对期望有贡献,因此贡献为ci/2。据此即可解答本题(注意特判n == 1的情况)
 
 
 
#include <bits/stdc++.h>

int n;
double c[1005];

int main()
{
    while(~scanf("%d", &n)){
        for(int i = 1; i <= n; ++i)
            scanf("%lf", &c[i]);
        if(n == 1){
            printf("%f\n", c[1]);
            continue;
        }
        double ans = (c[1]+c[n])/2;
        for(int i = 2; i < n; ++i)
            ans += c[i]/3;
        printf("%f\n", ans);
    }
    return 0;
}

 

posted on 2016-07-27 15:30  月夜下  阅读(174)  评论(0)    收藏  举报

导航

"320px">