P9121 [USACO23FEB] Hungry Cow B 题解

本文介绍了一个关于农场主约翰和他的牛贝西的计算问题,描述了如何在给定条件下模拟牛每天吃草的行为,使用C++编写代码解决求解干草堆总数的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目
有一位农场主约翰,他有一只饥饿的牛贝西。
每一天晚上,如果农场里有至少 
1
1 堆干草,那么贝西吃且仅吃 
1
1 堆干草。
有 

n 个事件,第 

i 个事件表示第 



i

  天早晨约翰搬运了 



i

  堆干草到农场。
求第 
1


1∼t 天贝西共吃掉干草堆的数量。
1



1
0
5
1≤n≤10 
5
 ,
1



1
0
14
1≤t≤10 
14
 ,
1




1
0
14
1≤d 
i

 ≤10 
14
 ,
1




1
0
9
1≤b 
i

 ≤10 
9
 。
1


1
<

2
<

<




1≤d 
1

 <d 
2

 <⋯<d 
n

 ≤t。
模拟做法
设 



sum 为目前农场里剩余干草堆的数量,



ans 为目前贝西共吃掉干草堆的数量。

对于每个 

i,我们不妨设 



pos 为第 



1




1

i−1

 ∼d 
i

 −1 天贝西共吃掉干草堆的数量,则有 



=
min

(



,






1
)
pos=min(sum,d 
i

 −d 
i−1

 ),并执行 











sum←sum−pos 与 







+



ans←ans+pos,最后不能忘了执行 







+


sum←sum+b 
i

 。

千万要注意,第 





n

 ∼t 天共吃掉干草堆的数量还没加上,所以最终要输出 



+
min

(



,




+
1
)
ans+min(sum,t−d 
n

 +1),而不是直接输出 



ans。

代码实现
#include<bits/stdc++.h>
using namespace std;
long long n,t,sum,ans,pos,d[100010],b[100010];
int main(){
    scanf("%lld%lld",&n,&t);
    for(long long i=1;i<=n;i++){
        scanf("%lld%lld",&d[i],&b[i]);
        pos=min(sum,d[i]-d[i-1]);
        sum-=pos,ans+=pos,sum+=b[i];
    }
    printf("%lld",ans+min(sum,t-d[n]+1));
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酸甜小杨桃

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值