奖学金
来源:互联网 发布:社会与经济统计数据库 编辑:程序博客网 时间: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
- 奖学金~~~~
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- 奖学金
- android反编译与加固(Mac版)
- 初学者容易犯的错误,SQL中的基本操作问题(mysql)二
- (OK) 移植,编译,安装 LineageOS-14.1-kiwi (Android-7.1.1,运行在Huawei honor 5x) for VirtualBox
- 安卓 呼吸灯效果--代码实现
- GPGPU OpenCL编程步骤与简单实例
- 奖学金
- 二维DCT变换
- C++析构函数
- 递归算法之排队购票问题(未名湖边的烦恼)java实现
- js-数据类型,怎么判断是数组?
- 程序员职业思考与规划 --- 程序员如何快速学习一项新技术
- 排序-冒泡排序(java实现)
- SPI、I2C、UART三种串行总线协议的区别
- 关于指针的入门试验