每天早上 55 点,三名农夫去牛场给奶牛们挤奶。
现在从 55 点开始按秒计时,第一名农夫在第 300300 秒开始给牛挤奶,并在第 10001000 秒停止挤奶。
第二名农夫在第 700700 秒开始给牛挤奶,并在第 12001200 秒停止挤奶。
第三名农夫在第 15001500 秒开始给牛挤奶,并在第 21002100 秒停止挤奶。
从开始挤奶到挤奶完全结束,这一期间,至少存在一名农夫正在挤奶的连续时间段的长度最长为 900900 秒(第 300300 秒至第 12001200 秒),完全没有任何农夫在挤奶的连续时间段的长度最长为 300300 秒(第 12001200 秒至第 15001500 秒)。
现在给你 N名农夫挤 N头奶牛的工作时间表,请你求出:
注意:本题中给出的所有时间均为时刻(时间点),因此在本题中挤奶区间 [100,200][100,200] 和 [201,300][201,300] 中间会有长度为 11 秒的间歇时间。
第一行包含整数 N,表示农夫数量。
接下来 N行,每行包含两个非负整数 l,r,表示农夫挤奶的开始时刻和结束时刻。
共一行,包含两个整数,分别表示最长连续挤奶时间以及最长连续无人挤奶时间。
1≤N≤5000
0≤l≤r≤1e6
- 3
- 300 1000
- 700 1200
- 1500 2100
900 300
- #include
- #include
- #define N 5010
- using namespace std;
- int main(){
-
- int n;
- pair<int,int> segs[N];
- cin>>n;
- for(int i=0;i
- cin>>segs[i].first>>segs[i].second;
- }
- sort(segs,segs+n);
- int res=0,res2=0;//最长挤奶时间,最长无人挤奶时间
- int l=segs[0].first,r=segs[0].second;
- for(int i=1;i
//从第二段区间开始比较 - if(segs[i].first<=r){
- r=max(r,segs[i].second);
- }
- else{
- res=max(res,r-l);
- res2=max(res2,segs[i].first-r);
- l=segs[i].first,r=segs[i].second;//更新区间
- }
- }
- res=max(res,r-l);
- cout<
" "< - return 0;
- }
提示:如果不懂pair对组,可以在我写的另外文章中看https://mp.csdn.net/mp_blog/creation/editor/136692825
-
相关阅读:
算法题java
【蓝桥每日一题]-动态规划 (保姆级教程 篇11)#方格取数2.0 #传纸条
Vue3 按需引入 Element Plus
六边形架构浅析
【字符串】KMP算法
SQL必需掌握的100个重要知识点:使用存储过程
前端项目--尚医通学习分享
一套JAVA语言开发的:危大工程智慧一体化工地系统源码,(后台管理端+APP+可视化大屏端)
SQL DDL DML
Win8如何删除临时文件?
-
原文地址:https://blog.csdn.net/weixin_74154742/article/details/136720930