2024 ccfcsp认证打卡 2023 03 02 垦田计划

这篇文章介绍了一个Java程序,通过Scanner处理输入,解决如何在给定资源和最少开垦天数的情况下,合理分配资源以完成任务的问题,涉及数组操作和时间复杂度分析。
摘要由CSDN通过智能技术生成

**加粗样式**

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int N = 100100;  // 定义一个较大的常数N
        long[] t = new long[N];  // 存储任务的耗时
        long[] c = new long[N];  // 存储每块区域投入资源的数量
        long[] cc = new long[N];  // 存储每块区域开垦耗时
        long maxn = 0;  // 最大的区域耗时

        // 输入区域数量n,初始资源数m,目标最少开垦天数k
        long n = input.nextLong();
        long m = input.nextLong();
        long k = input.nextLong();

        // 输入每块区域的耗时和将耗时缩短到k天所需资源数量
        for (int i = 0; i < n; i++) {
            t[i] = input.nextLong();  // 区域的初始耗时
            c[i] = input.nextLong();  // 区域的资源数量
            cc[(int) t[i]] += c[i];  // 将资源数量累加到对应区域的开垦耗时上
            maxn = Math.max(maxn, t[i]);  // 更新最大的区域耗时
        }

        // 从最大的区域耗时开始向前遍历,处理资源数量
        for (long i = maxn; i >= k; i--) {
            // 如果当前区域的开垦耗时大于初始资源m,则需要向前投入资源
            if (m > cc[(int) i]) {
                // 如果当前区域的耗时已经是目标最少开垦天数k,则输出k并结束循环
                if (i == k) {
                    System.out.println(k);
                    break;
                }
                // 否则,将当前区域的开垦耗时减去初始资源m,并加到前一个区域的开垦耗时上
                m -= cc[(int) i];
                cc[(int) (i - 1)] += cc[(int) i];
            } else {
                // 如果当前区域的开垦耗时小于等于初始资源m,则直接输出当前区域耗时并结束循环
                System.out.println(i);
                break;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值