题解 | #奖学金#贪心策略

奖学金

https://www.nowcoder.com/practice/cee98a512ec246a2918ea8121f7612c8

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int r = in.nextInt();
            int avg = in.nextInt();
            int[][] scores = new int[n][2];
            int sum = 0;
            for (int i = 0; i < n; i++) {
                scores[i][0] = in.nextInt();
                scores[i][1] = in.nextInt();
                sum += scores[i][0];
            }
            // 计算需要的总分数
            int needed = avg * n - sum;
            if (needed <= 0) {
                System.out.println(0);
                continue;
            }
            // System.out.println(needed);
            //按照复习时间排序 时间越少 提升分数空间越大的在最前面
            Arrays.sort(scores, (x, y)-> {
                return x[1]==y[1] ? x[0]-y[0] : x[1]-y[1];
            });
            long totalTime = 0;
            for (int i = 0; i < n; i++) {
                if (scores[i][0] < r) {
                    //可以提升的分数
                    int num = r - scores[i][0];
                    if(num>=needed){
                        totalTime +=(long)needed*scores[i][1];
                        needed=0;
                    }else{
                        totalTime+=(long)num*scores[i][1];
                        needed-=num;
                    }
                    if(needed==0){
                        break;
                    }
                }
            }
            System.out.println(totalTime);
        }
    }

}

全部评论

相关推荐

10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务