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

题目描述

作为“音乐鉴赏”课的任课老师,你的课程作为刷学分好课一直受到广泛欢迎。但这一学期,学校制定了新的标准,你的课的优秀率(分数超过90分的人数)被限制在10%以下!
为了应对这个调整,你要求所有的同学都写了一篇论文,并使用随机算法打出了0-90之间的分数,分数可能不是整数。这里的随机是指,对于在[0,90]这个闭区间上的任何一对等长的区间,分数出现在其中的概率均是相同的。在期末的分数占比为百分之多少的时候,你的课程优秀率期望恰好在10%?保证所有同学的平时成绩都高于90分。

输入描述:

输入第一行包含一个整数 n,保证n是10的倍数。
第二行包含 n 个整数,代表同学们的平时成绩。
$ 10leq nleq 100000 $。

输出描述:

输出一行一个百分数,代表期末分数占比多少为合适。保留两位小数。

输入

10
99 99 99 99 99 99 99 99 99 99

输出

50.00%

传送门:

https://ac.nowcoder.com/acm/contest/3005/G

思路:

设期末随机分数为$ y $,占比为$ x $(也就是要求的答案)。

则最终的分数 $ score=y*x+(1-x)*a_igeq 90 $ 其中$ a_i $为平时成绩。

化简可得 $ ygeq frac{90-(1-x)*a_i}{x} $.

所以一个人是优秀学生的概率 $ p_i $ 即为 $ y_{min} $-90与90的比值,

即 $ p_i=cfrac{90-cfrac{90-(1-x)*a_i}{x}}{90}  $

根据题意优秀学生的总人数不能超过10%,即 $ nsum p_i=0.1*n $

解得 $ x=frac{90*n-sum}{81*n-sum} $其中,$ sum $为总的平时成绩。

代码:

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 int main()
 6 
 7 {
 8     int n;
 9     scanf("%d", &n);
10     double sum = 0;
11     for(int i = 1; i <= n; i++)
12 
13     {
14         double x;
15         scanf("%lf", &x);
16         sum += x;
17     }
18 
19     printf("%.2lf%%
", 100*(90.0 * n - sum) / (81.0 * n - sum) );
20 }
原文地址:https://www.cnblogs.com/yyaoling/p/12301407.html