奖学金

来源:互联网 发布:社会与经济统计数据库 编辑:程序博客网 时间:2024/04/30 09:48

题目描述

小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


import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Map;import java.util.Scanner;import java.util.TreeMap;public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        while (sc.hasNext()) {            int n = Integer.parseInt(sc.next());            int r = Integer.parseInt(sc.next());            int avg = Integer.parseInt(sc.next());            int[] a = new int[n];            int[] b = new int[n];            for (int i = 0; i < n; i++) {                a[i] = Integer.parseInt(sc.next());                b[i] = Integer.parseInt(sc.next());            }            System.out.println(func(n, r, avg, a, b));        }        sc.close();    }    private static long func(long n, long r, long avg, int[] a, int[] b) {        long time = 0;        sort(a, b);        for (int i = 0; i < n; i++) {            if (sum(a) >= n * avg) {                break;            }            while (a[i] < r) {                a[i]++;                time += b[i];                if (sum(a) >= n * avg) {                    break;                }            }        }        return time;    }    private static long sum(int[] a) {        long sum = 0;        for (int i = 0; i < a.length; i++) {            sum += a[i];        }        return sum;    }    @SuppressWarnings({ "rawtypes", "unchecked" })    public static void sort(int[] a, int[] b) {        TreeMap<Integer, ArrayList<Integer>> hm = new TreeMap<Integer, ArrayList<Integer>>();        for (int i = 0; i < b.length; i++) {            if (hm.containsKey(b[i])) {                hm.get(b[i]).add(a[i]);            } else {                hm.put(b[i], new ArrayList<Integer>());                hm.get(b[i]).add(a[i]);            }        }        for (Map.Entry x : hm.entrySet()) {            Integer key = (Integer) x.getKey();            ArrayList<Integer> value = (ArrayList<Integer>) x.getValue();            Collections.sort(value, new Comparator<Integer>() {                @Override                public int compare(Integer o1, Integer o2) {                    return o1 < o2 ? 1 : -1;                }            });            hm.put(key, value);        }        int idx = 0;        for (Map.Entry x : hm.entrySet()) {            Integer key = (Integer) x.getKey();            ArrayList<Integer> value = (ArrayList<Integer>) x.getValue();            for (int i = 0; i < value.size(); i++) {                a[idx] = value.get(i);                b[idx++] = key;            }        }    }}
0 0
原创粉丝点击