链接:http://acm.hdu.edu.cn/showproblem.php?pid=5753
题意:数列c1~cn, h1~hn为ci的1~n的排列,求ci[hi>hi-1 and hi>hi+1]的期望和。
题解:
根据期望的线性性,我们可以分开考虑每个位置对答案的贡献。
可以发现当i不在两边的时候和两端有六种大小关系,其中有两种是对答案有贡献的。
那么对答案的贡献就是3ci。
在两端的话有两种大小关系,其中有一种对答案有贡献。
那么对答案的贡献就是2ci。
复杂度是O(n)。
注意特判n=1的情况。
#include <bits/stdc++.h>
using namespace std;
double a[1007];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)scanf("%lf",&a[i]);
if(n==1){printf("%.6lf\n",a[1]);continue;}
double ans=(a[1]+a[n])/2,temp=0;
for(int i=2;i<n;i++)temp+=a[i];
ans+=temp/3;
printf("%.6lf\n",ans);
}
return 0;
}
/*
4
3 2 4 5
5
3 5 99 32 12
*/