题目描述
作为“音乐鉴赏”课的任课老师,你的课程作为刷学分好课一直受到广泛欢迎。但这一学期,学校制定了新的标准,你的课的优秀率(分数超过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 }