• HDU 5753


    题意

    给定n,和n个非负数c[]

    若有1~n的排列满足该位置上数的值比左右两端大(h[0] = h[n + 1] = 0),将该位置上的c[i]添加到sum上。

    求sum的数学期望

    我一开始是按分处于两端和中间考虑,去算对sum有贡献的概率。算出两段的是1/2后,思考中间的发现,其实你只需要关注一个数与其周围的两个数即可,其他位置数的排列并不影响概率。所以两端的概率是1/2,中间是1/3.

     1 #include <cstdio>
     2 #define Yes printf("YES
    ")
     3 #define No printf("NO
    ")
     4 using namespace std;
     5 
     6 const int maxn = 1e3 + 10;
     7 int n;
     8 int a[maxn];
     9 
    10 
    11 int main(int argc, const char * argv[]) {
    12     while (~scanf("%d", &n)) {
    13         for (int i = 0; i < n; i++) {
    14             scanf("%d", &a[i]);
    15         }
    16         double ans = 0.0;
    17         for (int i = 1; i < n - 1; i++) {
    18             ans += (1.0 / 3.0) * (double)a[i];
    19         }
    20         ans += (0.5 * a[0]) + (0.5 * a[n - 1]);
    21         printf("%.6lf
    ", ans);
    22     }
    23     return 0;
    24 }
  • 相关阅读:
    javascript_数组
    Javascript_函数
    JavaScript思维导图
    django 中session的存储和获取
    使用 PyCharm 在centos 部署代码
    mac下使用async-profiler
    Mac系统如何清理mysql
    Java-多线程
    Java内部类
    WinForm使用发布方式进行安装的安装目录
  • 原文地址:https://www.cnblogs.com/xFANx/p/7259538.html
Copyright © 2020-2023  润新知