网易笔试题 奖学金

来源:互联网 发布:win10 软件兼容 编辑:程序博客网 时间:2024/05/18 03:53

题目描述

小v今年有n门课,每门都有考试,为了拿到奖学金,小v必须让自己的平均成绩至少为avg。每门课由平时成绩和考试成绩组成,满分为r。现在他知道每门课的平时成绩为ai ,若想让这门课的考试成绩多拿一分的话,小v要花bi 的时间复习,不复习的话当然就是0分。同时我们显然可以发现复习得再多也不会拿到超过满分的分数。为了拿到奖学金,小v至少要花多少时间复习。

输入描述:
第一行三个整数n,r,avg(n大于等于1小于等于1e5,r大于等于1小于等于1e9,avg大于等于1小于等于1e6),接下来n行,每行两个整数ai和bi,均小于等于1e6大于等于1

输出描述:
一行输出答案。

输入例子:
5 10 9
0 5
9 1
8 1
0 1
9 100

输出例子:
43

/** * 先复习bi小的课程 */#include <stdio.h>#include <stdlib.h>typedef struct cource {    int score;    int cost;} Cource;//按时间从小到大排序int compare(const void *a, const void *b) {    return ((Cource *) a)->cost > ((Cource *) b)->cost;}int main() {    Cource cources[100003];    int n, r, avg;    long long totalScore, scores, time;    while (scanf("%d %d %d", &n, &r, &avg) != EOF) {        time = scores = totalScore = 0;        for (int i = 0; i < n; ++i) {            scanf("%d %d", &cources[i].score, &cources[i].cost);            scores += cources[i].score;        }        qsort(cources, n, sizeof(cources[0]), compare);        totalScore = avg * n;        long long t1, t2;        for (int i = 0; i < n; ++i) {            if (scores >= totalScore) {                break;            }            if ((t1 = totalScore - scores) > (t2 = r - cources[i].score)) {                time += cources[i].cost * t2;                scores += t2;            } else {                time += cources[i].cost * t1;                scores += t1;            }        }        printf("%lld\n",time);    }}
0 0
原创粉丝点击