HDU 5753 Permutation Bo (组合数学)

题目链接:HDU 5753


题面:

Permutation Bo

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


Problem Description
There are two sequences h1hn and c1cn. h1hn is a permutation of 1n. 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>hi1  and  hi>hi+1]

Bo have gotten the value of c1cn, 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 ci(0ci1000).
 

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 104, 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
2016 Multi-University Training Contest 3


题意:

    给定一个序列C,其长度为N,随后随机生成一个1-N的全排列,序列两端各有一个0,若序列中某位置比两端的值都大,则该位置对应的C数组的值,可以取得,并加入总值,问最后总值的期望。


解题:

    比赛的时候,是队友猜的,也算是找规律吧。看了题解,说是6种情况,不是很明白,对于一个位置来说,不就左大又大,左小右小,左大右小,左小右大四种情况吗?看了网上十多篇题解,全都说找规律......也是醉了,唯独一篇讲的比较好,对于不是边缘的点,应该考虑其左右两侧和其自身三个位置的关系,全排列为6!,而符合的情况有2种,即左大右大(1),左大右大(2),即大的两个数位置可以交换,这点是没有考虑到的,故而概率为1/3,而对于边缘点,因为一个是0,故而概率为1/(2!)=1/2。随后,各位的值乘以概率的累加即为所求期望。


代码:

#include 
#include 
using namespace std;
int a[1005];
int main()
{
	int n;
	double ans=0;
	while(~scanf("%d",&n))
	{
		ans=0.0;
		for(int i=0;i

 

你可能感兴趣的:(数学,多校题集)