• 2020牛客寒假算法基础集训营4 G 音乐鉴赏


    https://ac.nowcoder.com/acm/problem/201638

    假设它的平时成绩是a,期末成绩是b,期末成绩占比为x

    它想要优秀,则a(1-x)+bx>90

    得到b>[90-a(1-x)]/x,令lim=这个优下限

    那么它优秀的概率(90-lim)/90

    所有人优秀的概率的和除以总人数即得到该课程优秀率

    二分这个x即可

    题解更妙

    因为平时成绩都>90,期末成绩都<=90

    所以若比90多出来的平时成绩能补给比90低的期末成绩,他就可以优秀

    即(a-90)(1-x)-bx>0 

    a是平时成绩  x是期末占比

    注意b是比90低多少分

    b<(a-90)(1-x)/x

    所以优秀的概率是(a-90)(1-x)/90x

    所有人的优秀概率总和=0.1n,即可把x解出来

    #include<cstdio>
     
    using namespace std;
     
    #define N 100001
     
    const double eps=1e-6;
     
    int n,a[101];
     
    double check(double x)
    {
        double m=0,lim;
        for(int i=91;i<=100;++i)
        {
            lim=(90-i*(1-x))/x;
            m+=(90-lim)/90*a[i];
        }
        return m/n;
    }
     
    int main()
    {
        scanf("%d",&n);
        int x;
        for(int i=1;i<=n;++i) 
        {
            scanf("%d",&x);
            a[x]++;
        }
        double l=0,r=1,mid;
        while(r-l>eps)
        {
            mid=(l+r)/2;
            if(check(mid)>0.1) l=mid;
            else r=mid;
        }
        printf("%.2lf%%",l*100);
        return 0;
    }
  • 相关阅读:
    jQuery:一些小练习
    jQuery
    JavaWeb:笔记(三)
    JavaWeb:笔记(二)
    JavaWeb:笔记(一)
    JavaWeb:文件的上传下载
    JavaWeb:Listener
    基于RRT的机器人自主探索建图
    OpenNI2安装
    g2o初始化一些
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/12300816.html
Copyright © 2020-2023  润新知