网易2015实习生笔试题——奖学金

奖学金

题目

小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(修课时间)进行排序,按照bi的顺序依次修课程,直到该门课程修到满分,或者总学分达到avg*n则结束。将修课的过程所需的时间加起来即为所求。代码很简单,就一个排序加循环。

代码

import java.util.*;


public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            int r = sc.nextInt();
            int avg = sc.nextInt();
            int[][] time = new int[n][n];
            for(int i = 0; i < n; i++){
                time[0][i] = sc.nextInt();
                time[1][i] = sc.nextInt();
            }
            bubbleSort(time, n);
            int sum = 0;
            int target = avg * n;
            for(int i = 0; i < n; i++){
                sum += time[0][i];
            }
            int p = 0;
            int add = 0;
            while(sum < target){
                int k = 0;
                while(time[0][p]+k < r && sum < target){
                    k++;
                    sum ++;
                }
                add += time[1][p] * k;
                p++;
            }
            System.out.println(add);
        }
    }
    public static void bubbleSort(int[][] time, int n){
        for(int i = 0; i+1 < n; i++){
            for(int j = 1; j+i < n; j++){
                if(time[1][j] < time[1][j-1]){
                    int tmp = time[1][j];
                    time[1][j] = time[1][j-1];
                    time[1][j-1] = tmp;
                    tmp = time[0][j];
                    time[0][j] = time[0][j-1];
                    time[0][j-1] = tmp;
                }
            }
        }
    }
}

ps:只过了80%的测试样例,还需要再完善。
题目原地址——牛客网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值