zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    服务器响应状态码
    30
    29
    Java中参数始终是按值传递
    浅析 Java 中的继承和重写
    25
    super 关键字
    24
    Overriding
    23
  • 原文地址:https://www.cnblogs.com/xFANx/p/7259538.html
Copyright © 2011-2022 走看看