AT1543 ヘイホー君と最終試験

思路 : 将 n − 1 n - 1 n1 个的成绩进行排序,统计前 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值