码迷,mamicode.com
首页 > 其他好文 > 详细

HDU5753 Permutation Bo(2016多校训练)

时间:2016-08-02 01:20:27      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

Permutation Bo

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


Problem Description
There are two sequences h技术分享1技术分享h技术分享n技术分享技术分享 and c技术分享1技术分享c技术分享n技术分享技术分享 . h技术分享1技术分享h技术分享n技术分享技术分享 is a permutation of 1n技术分享 . particularly, h技术分享0技术分享=h技术分享n+1技术分享=0技术分享 .

We define the expression [condition]技术分享 is 1 when condition技术分享 is True,is 0 when condition技术分享 is False.

Define the function f(h)=技术分享n技术分享i=1技术分享c技术分享i技术分享[h技术分享i技术分享>h技术分享i1技术分享  and  h技术分享i技术分享>h技术分享i+1技术分享]技术分享

Bo have gotten the value of c技术分享1技术分享c技术分享n技术分享技术分享 , 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(1n1000)技术分享 , second line contains n技术分享 non-negative integer c技术分享i技术分享(0c技术分享i技术分享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
 
 
根据题意,可以考虑每个位置对期望的贡献。当i不在排列两端的时候,有3! = 6种大小关系,其中有2种对期望有贡献,因此贡献为ci/3;当i在排列两端时,有2! = 2种大小关系,其中有1种对期望有贡献,因此贡献为ci/2。(注意特判n == 1的情况)
 
技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <string>
 6 using namespace std;
 7 typedef long long ll;
 8 typedef unsigned long long ull;
 9 typedef long double ld;
10 #define MAX 1005
11 
12 int n;
13 int c[MAX];
14 double ans;
15 void solve()
16 {
17     for(int i=1;i<=n;i++)
18         cin >> c[i];
19     if(n==1)
20     {
21         ans = c[1];
22         return;
23     }
24     if(n==2)
25     {
26         ans = (c[1]+c[2])/2.0;
27         return;
28     }
29     ans = 0;
30     for(int i=2;i<n;i++)
31         ans += (c[i])/3.0;
32     ans+=c[1]/2.0;
33     ans+=c[n]/2.0;
34 }
35 int main()
36 {
37     while(~scanf("%d",&n))
38     {
39         solve();
40         printf("%.6f\n",ans);
41     }
42     return 0;
43 }
View Code

 

HDU5753 Permutation Bo(2016多校训练)

标签:

原文地址:http://www.cnblogs.com/Mino521/p/5727709.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!