题目:AcWing 4908.饥饿的牛

贝茜是一头饥饿的牛。每天晚上,如果牛棚中还有干草的话,贝茜都会吃掉其中的一捆。

初始时,牛棚中没有干草。

为了让贝茜不被饿死,农夫约翰制定了N个给贝茜送干草的计划。

其中第 i个计划是在第 di天的白天给贝茜送去 bi捆干草。

这些计划互不冲突,保证 1≤d1<d2<…<dN≤T。

请你计算,贝茜在第 1∼T天中有多少天有干草吃。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//ACW4908 hunger cow
#include<iostream>
using namespace std;

int main()
{
long long n,t;//送n次草,共t天
long long di,bi,cao=0,last=0;//当前送草日,当前送草量,上次更新的库存草料数,上次送草日
long long fullDay=0;//吃饱天数

cin>>n>>t;

while(n--)
{
scanf("%lld %lld",&di,&bi);
if(di-last>cao)//中间挨饿了
{
fullDay+=cao;
cao=bi;
}else{
cao-=(di-last);
cao+=bi;
fullDay+=di-last;
}
last=di;
}

//处理最后一次送草的余料
if(cao>=(t-last+1)) fullDay+=(t-last+1);//够吃到结束
else fullDay+=cao;//不够吃到结束
cout<<fullDay<<endl;

return 0;
}