AcWing 4908. 饥饿的牛
贝茜是一头饥饿的牛。
每天晚上,如果牛棚中还有干草的话,贝茜都会吃掉其中的一捆。
初始时,牛棚中没有干草。
为了让贝茜不被饿死,农夫约翰制定了 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. 饥饿的牛相关推荐
- AcWing 101. 最高的牛
题目 有 N 头牛站成一行,被编队为1.2.3-N1.2.3-N1.2.3-N,每头牛的身高都为整数. 当且仅当两头牛中间的牛身高都比它们矮时,两头牛方可看到对方. 现在,我们只知道其中最高的牛是第 ...
- JAVA101本土精选,AcWing 101. 最高的牛JAVA
题目知识点 1.本题使用到了差分,因为要求的有牛可能的最大值,所以每头牛初始化为h,a,b之间要互相看得见,所以对中间的值都-1 2.是要对数据进行判重,yxc这边用到了set< pair< ...
- AcWing 1922. 懒惰的牛(前缀和 or 双指针)
思路 因为数据范围很小,所以我们可以直接用前缀和的方法做,当然也可以用尺举法,后面补上 前缀和 因为x的数据范围就是1e6,那么我们直接把对应地点的值加上去就好了 #include<bits/s ...
- 算法模板:动态规划之01背包【沈七】
算法模板:动态规划之01背包 前言 动态规划 01背包 二维背包 一维优化 经典习题 小A点菜 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: ...
- BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草
1606: [Usaco2008 Dec]Hay For Sale 购买干草 Description 约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤5 ...
- BZOJ_1606_ [Usaco2008_Dec]_Hay_For_Sale _购买干草_(背包)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1606 价值和重量相等的01背包问题. 分析 ... 1 #include <bits/s ...
- 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: ...
- bzoj 1606 购买干草
Description 约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草. 顿因有H(1≤H≤5000)包干草,每 ...
最新文章
- c#读写XML文件 (转)
- TCP拥塞状态机的实现(中)
- 内联函数声明与实现分为两个文件导致编译出错问题
- GraphSAGE 模型解读与tensorflow2.0代码实现
- 解决C# 7.2中的结构体性能问题
- C++串行编程步骤介绍
- sea.js常用接口
- 转:C++ map的基本操作和使用
- PHP手册总结《预定义变量》
- 【loj3056】【hnoi2019】多边形
- 在RedHat5中实现透明代理
- arcgis api 3.X 几种查询方式比较
- iis启动服务时提示在本地计算机 无法启动iis admin服务,无法启动IIS Express Web服务器...
- 鸿蒙官方编辑器 DevEco Studio 2.0.12.201使用流程
- AI CC2017安装后,安装目录里找不到amtlib.dll文件的问题
- 决策树ID3算法实现与讨论(完整代码与数据)
- DataGear 数据可视化看板整合前端框架Vue
- 十载寒冰,难凉热血——2020CSDN年度博客之星Top10心路历程
- 统一网关Gateway、路由断言工厂、路由过滤器及跨域问题处理
- 成立一年,手游交叉推广交易社区Chartboost已有8000款游戏加入