思路 : 将
n
−
1
n - 1
n−1 个的成绩进行排序,统计前
k
k
k 个大的成绩之和。如果得出的前
k
k
k 个大的成绩之和的平均分大于等于分数线
R
R
R,输出 0
;否则求期末考试至少考多少分才能使前
k
k
k 个大的成绩之和的平均分至少等于
R
R
R 并输出。( 注意 : 如果得出的要达到的期末考试分数大于实际卷子的满分,只输出 -1
)。
参考代码如下 :
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
ll n, k, m, r;
ll s[1001], sum, u;
int main () {
scanf("%lld %lld %lld %lld", &n, &k, &m, &r);
for (ll i = 1; i < n; i ++) {
scanf("%lld", &s[i]);//输入n-1个的成绩
}
n -= 1;
sort(s + 1, s + n + 1);
for (ll i = n; i >= n - k + 1; i --) {
sum += s[i];
u = s[i];
}
ll score = r * k;//因为求平均分的时候可能会除不尽,所以直接乘上k个r
if (sum < score) {//判断是否达到分数线
ll last = score - sum + u;
if (last > m) printf("-1\n");//判断是否会超过实际卷子的满分
else printf("%lld\n", last);
return 0;
}
printf("0\n");
return 0;
}