题目链接:https://www.acwing.com/problem/content/description/4911/
1. 题解(4908. 饥饿的牛)
y总视频讲解:https://www.acwing.com/video/4739/
1.1 顺序遍历:区间计算 ⭐
时间复杂度O(1),空间复杂度O(1)
【解题思路】:无算法,纯数学应用推导;
该题包括四种输入参数:
- N:除第一行外的总行数
- T:1~T天
- di:di 天
- bi:bi 捆干草
……
该题的主要难点集中于有些输入参数的数据范围过大,超过了int类型,如果对天数进行遍历,很容易就会产生超时。因此,最好的办法就是对只有 105 的N做遍历,每遍历到一个,就对其进行一次区间计算,算出该区间中有草吃的天数,最后再对最后一个区间进行单独处理,多退少补,即可得到最终答案。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 总区间数
long T = sc.nextLong(); // 总天数
long res = 0, cur = 0, last = 0;
while (N-->0) {
long d = sc.nextLong(); // di天
long b = sc.nextLong(); // bi捆干草
long len = d - 1 - last; // 当前区间长度
long days = Math.min(len, cur); // 当前区间可以吃到草的天数
res += days;
cur = cur - days + b;
last = d - 1;
}
res += Math.min(cur, T - last); // 单独处理最后一个区间
System.out.println(res);
}
}