2017网易互联网内推笔试题(奖学金问题)
来源:互联网 发布:python主流版本 编辑:程序博客网 时间:2024/05/18 21:42
//来源:网易
//奖学金
//题目描述:小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
//
//输出描述:一行输出答案。
//
//解题思路:这是一道动态规划问题,难。
// 自己想不明白,看别人的答案
// 分析思路:数据结构使用了列表list
// 为了求至少花多长时间复习,那么经历多花时间在所需时间少的课程上,使其达到满分;
// 所以对存储的节点数据,根据其所需时间的大小排序,先计算耗时少的课程得分,并使其
// 逐渐增加,最后达到要求平均分的目的。
//运行结果:运行时间:166ms
// 占用内存:5347k
import java.text.DecimalFormat;public class getJXJ{ public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { int n = in.nextInt(); int r = in.nextInt(); int avg = in.nextInt(); List<Node> list = new ArrayList<Node>(); for(int i=0; i<n; i++){ int x = in.nextInt(); int y = in.nextInt(); list.add(new Node(x, y)); } compute(list, r, avg); } } public static void compute(List<Node> list, int r, int avg){ double num = list.size()*avg; for (int i = 0; i < list.size(); i++) { num -= list.get(i).getAi(); } List<Node> list1 = new ArrayList<Node>(); //新建一个list,将每门课的满分减去当前得分作为ai节点,bi节点是每门课复习所需时间 for (int i = 0; i < list.size(); i++) { list1.add(new Node(r-list.get(i).getAi(), list.get(i).getBi())); } //比较list1中每门课复习所需时间,并进行从小到大排序 Collections.sort(list1, new Comparator<Node>() { @Override public int compare(Node o1, Node o2) { // TODO Auto-generated method stub return o1.getBi().compareTo(o2.getBi()); } }); double time = 0; for (int i = 0; i < list1.size(); i++) { if (num>0) //没达到平均分 { if (num>list1.get(i).getAi()) //若第i门课所需得分(达到满分)小于达到平均分所需分数 { num -= list1.get(i).getAi(); //总数求和里面减去这门课的得分 time += list1.get(i).getAi() * list1.get(i).getBi(); //学习第i门课所需时间 }else { //最后一门课无需达到满分的情况 time += num*list1.get(i).getBi(); break; } }else {//达到平均分 break; } } //数字格式化显示 DecimalFormat decimalFormat = new DecimalFormat("#.##"); //#代表数字的一位阿拉伯数字,若该位不存在数字,则不显示// System.out.println(time); System.out.println(decimalFormat.format(time)); }}class Node{ private Integer ai; private Integer bi; public Node(int ai, int bi){ this.ai=ai; this.bi=bi; } public Integer getAi(){ return this.ai; } public Integer getBi(){ return this.bi; }}
1 0
- 2017网易互联网内推笔试题(奖学金问题)
- 2017年网易互联网内推笔试题-数字游戏
- 2017年网易互联网内推笔试题-Fibonacci数列
- 2017网易内推笔试题
- 2017年网易内推笔试题
- 网易2017内推笔试题
- 【网易2017内推笔试编程题】
- 网易2017内推笔试题
- 网易2017内推笔试程序题
- 网易2017内推笔试编程题(合集)
- 网易2017内推笔试题(合唱团)
- 网易内推笔试题
- 校园招聘-2017网易互联网研发内推笔试编程题1
- 网易笔试题 奖学金
- 2017网易内推编程题(网格问题)
- 网易内推笔试题2017机器视觉算法工程师
- 2017网易有道内推笔试编程题1:洗牌
- 2017网易内推笔试题---混合颜料
- HDU-1036
- 通过Spark Streaming的window操作实战模拟热点搜索词案例实战
- ULR Web 三种路径
- 关于tomcat中Servlet对象池
- 机器学习(三) 深度学习的经典论文、代码、博客文章
- 2017网易互联网内推笔试题(奖学金问题)
- android 网文技术资料汇总
- POJ 1077(HDU 1043) Eight(八数码A*算法)
- 用户协议
- Android Studio Gradle实践之多渠道自动化打包(Android快速多渠道打包)
- ios中播放gif动画
- nutch源码分析---6
- C语言指针(三)
- Java输入输出流