4908. 饥饿的牛 - AcWing题库
康复训练,太长时间没有做题,仅是分享思路。
这道题乍一看就是一道合并区间的问题,但是这些区间重合的地方并不是简单的做了覆盖,而是把重复的部分加在了区间的末尾,那其实就是对有区间做一个扩充,本质上还是一个区间的问题。
附了一张图,大概就是这么回事。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
long long n,t,a,b,res = 0,l = 1 ,r = 0;
cin >> n >> t;
for (int i = 0; i < n; i ++ )
{
cin >> a >> b;
if(a <= r)
{r += b;}
else
{res += r - l + 1;l = a;r = a + b - 1;}
if(r >= t) {res += t - l + 1;break;}
}
if(r < t) res += r - l + 1;
cout << res << endl;
return 0;
}
没啥难度,但是数据类型没考虑好,一开始用int错了好几回。