zoukankan      html  css  js  c++  java
  • HDU_6693 Valentine's Day 【概率问题】

    一、题目

      Valentine's Day

    二、分析

      假设$ s_0 $代表不开心的概率,$ s_1 $代表开心一次的概率。

      那么随便取一个物品,那么它的开心概率为$ p _i $,可以推导加入之后使女朋友不开心和开心一次的概率为$$ s_0 = s_0(1-p_i) $$ $$ s_1 = s_1 + (s_0 - s_1)p$$

      通过式子可以推导出,如果$  s_0 le s_1 $,则开心一次的概率就不会有任何增长。

      所以,可以将概率从大到小排序,然后不断加入,判断一下就可以了。

    三、AC代码

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 #define ll long long
     5 #define Min(a,b) ((a)>(b)?(b):(a))
     6 #define Max(a,b) ((a)>(b)?(a):(b))
     7 #define P pair<int, int>
     8 
     9 int main()
    10 {
    11     int T;
    12     scanf("%d", &T);
    13     while(T--) {
    14         int n;
    15         double p;
    16         vector<double> vec;
    17         scanf("%d", &n);
    18         for(int i = 0; i < n; i++) {
    19             scanf("%lf", &p);
    20             vec.push_back(p);
    21         }
    22         sort(vec.begin(), vec.end(), greater<double>());
    23         double ans1 = 1.0, ans2 = 0;
    24         for(int i = 0; i < vec.size(); i++) {
    25             if(vec[i] == 1.0) {
    26                 ans2 = 1.0;
    27                 break;
    28             }
    29             else {
    30                 double res1 = ans1 * (1.0 - vec[i]);
    31                 double res2 = ans2 + vec[i]*(ans1 - ans2);
    32                 ans1 = res1, ans2 = res2;
    33                 if(ans1 <= ans2)
    34                     break;
    35             }
    36         }
    37         printf("%.12lf
    ", ans2);
    38         
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    张照行 的第九次作业
    张照行 的第八次作业
    Learning by doing
    张照行 的第七次作业
    张照行 的第六次作业
    Java第七次作业
    java第五次作业
    Java第七次作业
    Java第六次课后作业
    第五次Java作业
  • 原文地址:https://www.cnblogs.com/dybala21/p/11403111.html
Copyright © 2011-2022 走看看