zoukankan      html  css  js  c++  java
  • Gym 101257G 24 (概率+二分)

    题意: 有一道分值为sa的题,n个人比赛写这道题,按照递减的顺序给出每个人的当前分数,和每个人写不出这道题的概率,让你输出有反超现象出现的期望 

    思路:由于之前把题目翻译错了导致很久没有相通,后来看了别人的博客和代码才理解了这道题 http://blog.csdn.net/richie_ll/article/details/57088108

             首先我们先看一下什么是数学期望:试验中每次结果可能的概率乘以其结果的总和,再回过头来看这道题,让你求出有反超现象出现的期望,其实也是在求反超现象出现的概率(可以认为是二项分布),那什么时候会出现反超现象呢?假设我的现在的分数是num,我作对一题可以得10分,那么在我前面的[num,num+10)这个范围内的对手不做出来题我就能反超,其他对手爱咋地咋地,反正也赢不了他,那么这个范围我们应该怎么去找能,答案是二分!用c++里自带的迭代器我们就快速找到!

    代码:

    #include <cstdio>
    #include <iostream>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    int data[100005];
    double p[100005];
    double sum[100005];
    
    bool cmp(int a,int b)
    {
        if(a>b) return true;
        else return false;
    }
    
    int main()
    {
        int n,num;
        double ans;
        while(cin>>n>>num)
        {
            for(int i=0;i<n;i++)
            scanf("%d",&data[i]);
            for(int i=0;i<n;i++)
            scanf("%lf",&p[i]);
            sum[1]=p[0];
            for(int i=1;i<n;i++)
            sum[i+1]=sum[i]+p[i];
            ans=0;
            for(int i=0;i<n;i++)
            {
                int l=upper_bound(data,data+n,data[i]+num,cmp)-data;
                int r=lower_bound(data,data+n,data[i],cmp)-data;
                ans+=(sum[r]-sum[l])*(1.0-p[i]);
            }
            printf("%.9lf
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    输入输出重定向
    进程管理
    普通变量_环境变量_环境变量配置文件
    高级文件操作命令_文件查找
    软件包管理_rpm命令管理_yum工具管理_文件归档压缩_源码包管理
    用户管理_组管理_设置主机名_UGO_文件高级权限_ACL权限
    字符串是否包含中文
    SQL 优化
    JS数组
    RedisUtil 工具类
  • 原文地址:https://www.cnblogs.com/simplekinght/p/6576160.html
Copyright © 2011-2022 走看看