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).
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).
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
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 ", c[1]); continue; } double ans = (c[1]+c[n])/2; for(int i = 2; i < n; ++i) ans += c[i]/3; printf("%f ", ans); } return 0; }