贝茜是一头饥饿的牛。

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

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

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

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

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

输入样例1:
1 5
1 2
输出样例1:
2
样例1解释
两捆干草在第 1 天早上被送到了牛棚,所以贝茜第 1,2 天有干草吃。

输入样例2:
2 5
1 2
5 10
输出样例2:
3
样例2解释
两捆干草在第 1 天早上被送到了牛棚,所以贝茜第 1,2 天有干草吃。

10 捆干草在第 5 天早上被送到了牛棚,所以贝茜第 5 天有干草吃。

输入样例3:
2 5
1 10
5 10
输出样例3:
5
10捆干草在第 1天早上被送到了牛棚,所以贝茜第 1∼5 天都有干草吃。

思路:

这个问题的中心思想就是,把1 ~ t 这段天数看成一个线段,每个 di 天的时候给 bi 捆草,也就是说 di ~ di+bi 这个线段是有草吃的,那想要得到的结果就是在一个大线段中有许多这样的小线段,问大线段上被小线段覆盖过的整数点有多少个。

可以看到,题目中天数的数据范围是10的14次幂,所以说按照你的第一反应,有草吃的那天bool值为1,没草吃bool值为0,然后遍历一遍是行不通的。

注意到 d 的数量,即发草的天数是有限的,N范围内,那既然所有天数看不了,我们就看所有的 d 就好了,回到上面我们讲的思路,也就是每次都看小线段的起始点。我们用一个 k 表示之前的草最多可以吃到哪一天。因为开始 k=0 ,所以用一个 f 来特判一下是不是第一次。

如果 f == 0,说明是第一次,那要看 d 是不是1,是一的话说明第一天有草吃,那当前的草最多就可以吃到 k+b 天,以此更新k。如果d不是1,那说明 d 之前都是没草吃的,这里我们用 res 来记录没有草吃的天数。然后用d+b-1来更新 k 。

如果 f 不是 0 ,说明现在不是第一次发草,那就看 d 和 k 的大小来进行比较就行了,d 大于 k+1 的话说明k ~ d 这段时间没草吃,否则就是有草吃,不断更新 k 值就行了。

需要注意的是,在更新res 的时候,要注意看天数和 t 的关系。

代码:

#include<bits/stdc++.h>
using namespace std;int main(){long long int n , t;cin >> n >> t;long long int d;int b;long long int k = 0;int f = 0;int z = 0;long long int res = 0;for(int i = 0 ; i < n ; i++){cin >> d >> b;if(z == 1)break;if(f == 0){f = 1;if(d == 1){k = k + b;if(k >= t)z = 1;}else{if(d < t)res = res + d - 1;elseres = res + t , z = 1;k = d + b - 1;}}else{if(d > k+1){if(d <= t)res += d-k-1;elseres += t-k , z = 1;k = d + b - 1;}else{k = k + b;}}}// cout << res << "*** " << endl;if(z!=1 && k < t)res += t - k;cout << t - res << endl;return 0;
}

AcWing 4908. 饥饿的牛相关推荐

  1. AcWing 101. 最高的牛

    题目 有 N 头牛站成一行,被编队为1.2.3-N1.2.3-N1.2.3-N,每头牛的身高都为整数. 当且仅当两头牛中间的牛身高都比它们矮时,两头牛方可看到对方. 现在,我们只知道其中最高的牛是第 ...

  2. JAVA101本土精选,AcWing 101. 最高的牛JAVA

    题目知识点 1.本题使用到了差分,因为要求的有牛可能的最大值,所以每头牛初始化为h,a,b之间要互相看得见,所以对中间的值都-1 2.是要对数据进行判重,yxc这边用到了set< pair< ...

  3. AcWing 1922. 懒惰的牛(前缀和 or 双指针)

    思路 因为数据范围很小,所以我们可以直接用前缀和的方法做,当然也可以用尺举法,后面补上 前缀和 因为x的数据范围就是1e6,那么我们直接把对应地点的值加上去就好了 #include<bits/s ...

  4. 算法模板:动态规划之01背包【沈七】

    算法模板:动态规划之01背包 前言 动态规划 01背包 二维背包 一维优化 经典习题 小A点菜 5 倍经验日 买干草 完结散花 参考文献 前言 唤我沈七就好啦. 动态规划 核心作用:优化 当数据范围& ...

  5. [BZOJ] 1606: [Usaco2008 Dec]Hay For Sale 购买干草

    1606: [Usaco2008 Dec]Hay For Sale 购买干草 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1335  Solved:  ...

  6. BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草

    1606: [Usaco2008 Dec]Hay For Sale 购买干草 Description     约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤5 ...

  7. BZOJ_1606_ [Usaco2008_Dec]_Hay_For_Sale _购买干草_(背包)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1606 价值和重量相等的01背包问题. 分析 ... 1 #include <bits/s ...

  8. bzoj 1606 [Usaco2008 Dec]Hay For Sale 购买干草(01背包)

    1606: [Usaco2008 Dec]Hay For Sale 购买干草 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1300  Solved:  ...

  9. bzoj 1606 购买干草

    Description 约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草.  顿因有H(1≤H≤5000)包干草,每 ...

最新文章

  1. c#读写XML文件 (转)
  2. TCP拥塞状态机的实现(中)
  3. 内联函数声明与实现分为两个文件导致编译出错问题
  4. GraphSAGE 模型解读与tensorflow2.0代码实现
  5. 解决C# 7.2中的结构体性能问题
  6. C++串行编程步骤介绍
  7. sea.js常用接口
  8. 转:C++ map的基本操作和使用
  9. PHP手册总结《预定义变量》
  10. 【loj3056】【hnoi2019】多边形
  11. 在RedHat5中实现透明代理
  12. arcgis api 3.X 几种查询方式比较
  13. iis启动服务时提示在本地计算机 无法启动iis admin服务,无法启动IIS Express Web服务器...
  14. 鸿蒙官方编辑器 DevEco Studio 2.0.12.201使用流程
  15. AI CC2017安装后,安装目录里找不到amtlib.dll文件的问题
  16. 决策树ID3算法实现与讨论(完整代码与数据)
  17. DataGear 数据可视化看板整合前端框架Vue
  18. 十载寒冰,难凉热血——2020CSDN年度博客之星Top10心路历程
  19. 统一网关Gateway、路由断言工厂、路由过滤器及跨域问题处理
  20. 成立一年,手游交叉推广交易社区Chartboost已有8000款游戏加入

热门文章

  1. mac 安装任何来源 命令
  2. Vue声明式路由导航和编程式路由导航的优缺点及实现方法
  3. Kmeans和谱聚类算法(python实现sklearn)
  4. QT之QSetting的使用
  5. 构建一个WooCommerce付款扩展
  6. 消息队列(Message Query)的初学习
  7. 作为一名前端工程师,你需要学习哪些技术栈呢?
  8. Java多线程模拟售票系统
  9. 计算机视觉:多相机硬件同步拍摄
  10. 企业微信社群运营案例拆解:瑞幸咖啡