zoukankan      html  css  js  c++  java
  • 网易2016研发工程师编程题:奖学金

    奖学金
    小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

    解题

    暴力,找到第一个最小学习时间,每次学习一个最小时间,成绩加一分,当到达满分的时候,找第二个最小学习时间。
    同时 使用Long,不然出现了内存溢出的情况
     1 import java.util.Scanner;
     2 public class Main{
     3     public static void main(String[] args){
     4         Scanner in = new Scanner(System.in);
     5         while(in.hasNext()){
     6             // 课程数
     7             int n = in.nextInt();
     8             // 满分
     9             long r = in.nextLong();
    10             // 平均分
    11             long avg = in.nextLong();
    12             // 需要得到分数
    13             long count = n*avg;
    14             long study = 0;
    15             // 平时成绩
    16             long[] A = new long[n];
    17             // 提示一分花费时间
    18             long[] B = new long[n];
    19             long minhour = Integer.MAX_VALUE;
    20             int minIndex = -1;
    21             for(int i =0;i<n;i++){
    22                 A[i] = in.nextLong();
    23                 B[i] = in.nextLong();
    24                 // 去除平均分还需要获得分数 
    25                 count-=A[i];
    26                 // 找到最小时间提升分数的时间
    27                 if(minhour >B[i]){
    28                     minhour = B[i];
    29                     minIndex = i;
    30                 }
    31             }
    32             while(count>0){
    33                 // 最小花费时间努力
    34                 while(count>0 && A[minIndex]<r){
    35                     count-=1;
    36                     A[minIndex]+=1;// 成绩增加在平时分数上面 
    37                     study+=minhour;
    38                     if(count<=0) break;
    39                 }
    40                 if(count<=0) break;
    41                 B[minIndex] = Integer.MAX_VALUE;
    42                 minhour = Integer.MAX_VALUE;
    43                 minIndex = -1;
    44                 for(int i =0;i<n;i++){        
    45                     // 找到最小时间提升分数的时间
    46                     if(minhour >B[i]){
    47                         minhour = B[i];
    48                         minIndex = i;
    49                     }
    50                 }
    51                     
    52             }
    53             System.out.println(study);
    54             
    55         }
    56         in.close();
    57     }
    58 }
  • 相关阅读:
    hadoopfs: 未找到命令...
    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    centos 7 安装音乐播放器(亲测可用)(转载)
    Linux 脚本编写基础
    Zip加密
    Qt嵌入cef3关闭窗口时崩溃的问题
    C++11多线程基础
    C++11多线程(std::atomic)
    C++11多线程(thread_local)
    VS 新建RelWithDebInfo模式
  • 原文地址:https://www.cnblogs.com/bbbblog/p/5281312.html
Copyright © 2011-2022 走看看