Java刷ACM模式的各类输入输出构造

Java刷ACM模式的各类输入输出构造

之前在LeetCode上刷题都是用到核心代码模式,后面面试发现部分笔试题使用的是ACM模式(第一次的时候因为构造输入输出问题,导致无法ac)所以含泪总结一下
1、多行输入
以牛客上的奖学金一题为例,详细见下面代码:

package learnACM;

import java.util.Arrays;
import java.util.Scanner;

public class MultilineInput {
   
    // 题目
    // 小v今年有n门课,每门都有考试,为了拿到奖学金,小v必须让自己的平均成绩至少为avg。
    // 每门课由平时成绩和考试成绩组成,满分为r。
    // 现在他知道每门课的平时成绩为ai ,若想让这门课的考试成绩多拿一分的话,小v要花bi 的时间复习,不复习的话当然就是0分。
    // 同时我们显然可以发现复习得再多也不会拿到超过满分的分数。为了拿到奖学金,小v至少要花多少时间复习。

    public static void main(String[] args) {
   
        // 输入描述:
        // 第一行三个整数n,r,avg(n大于等于1小于等于1e5,r大于等于1小于等于1e9,avg大于等于1小于等于1e6),
        // 接下来n行,每行两个整数ai和bi,均小于等于1e6大于等于1
        // 示例1
        // 输入
        // 5 10 9
        // 0 5
        // 9 1
        // 8 1
        // 0 1
        // 9 100
        //Scanner类默认的分隔符就是空格
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
   
            int n=sc.nextInt();
            int full=sc.nextInt();
            int avg=sc.nextInt();
            int[][] nums=new int[n][2];
            for(int i=0;i<n;i++){
   
                nums[i][0]=sc.nextInt();
                nums[i][1]=sc.nextInt();
            }
            //假定不会出现拿不到奖学金的情况
            if (n==1){
   
                System.out.println((avg-nums[0][0])*nums[0][1]);
                continue;
            }
            Arrays.sort(nums, (o1, o2) -> o1[1] - o2[1]);//按复习代价从小到大排序
            long sum=0;
            for(int[] a:nums) {
   
                sum+=a[0];
            }
            long limit=avg*n;
            int index=0;
            long time=0;
            while(sum<limit){
   
                int tmp=full-nums[index][0];
                if(tmp+sum<=limit)
  • 47
    点赞
  • 192
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值