AcWing 1343. 挤牛奶(每日一题)

简介: AcWing 1343. 挤牛奶(每日一题)

原题链接:1343. 挤牛奶 - AcWing题库

每天早上 5 点,三名农夫去牛场给奶牛们挤奶。

现在从 5 点开始按秒计时,第一名农夫在第 300 秒开始给牛挤奶,并在第 1000 秒停止挤奶。


第二名农夫在第 700 秒开始给牛挤奶,并在第 1200 秒停止挤奶。


第三名农夫在第 1500 秒开始给牛挤奶,并在第 2100 秒停止挤奶。


从开始挤奶到挤奶完全结束,这一期间,至少存在一名农夫正在挤奶的连续时间段的长度最长为 900 秒(第 300 秒至第 1200 秒),完全没有任何农夫在挤奶的连续时间段的长度最长为 300 秒(第 1200 秒至第 1500 秒)。


现在给你 N名农夫挤 N头奶牛的工作时间表,请你求出:


  1. 至少存在一名农夫正在挤奶的连续时间段的最长长度。
  2. 没有任何农夫在挤奶的连续时间段的最长长度。

注意:本题中给出的所有时间均为时刻(时间点),因此在本题中挤奶区间 [100,200]和 [201,300] 中间会有长度为 1 秒的间歇时间。


输入格式


第一行包含整数 N,表示农夫数量。


接下来 N行,每行包含两个非负整数 l,r,表示农夫挤奶的开始时刻和结束时刻。


输出格式


共一行,包含两个整数,分别表示最长连续挤奶时间以及最长连续无人挤奶时间。


数据范围


1≤N≤5000

0≤l≤r≤10^6


输入样例:

3
300 1000
700 1200
1500 2100

输出样例:

900 300

题解

主要就是区间是否重合,重合则不断扩大,顺便求一个连续的空白区间,算法标签,区间合并,先对区间排序,先选取第一个数据作为起始,如果新的区间右端点小于等于此时r,更新r为最大值。如果遇到断开不连续的区间则用second-r去找无人挤牛奶的时间,每次取最大值。最后注意把最大接牛奶时间更新一下,不然会漏掉最后一个数据,或者漏掉只有一组数据的情况。

#include<iostream>
#include<algorithm>
using namespace std;
typedef pair<int,int> PII;
const int N=5005;
int n;
int res1,res2;//res1最长连续挤奶时间,res2及最长连续无人挤奶时间
PII a[N];
int main(){
  cin>>n;
  for(int i=0;i<n;i++){
    cin>>a[i].first>>a[i].second;
  }
  sort(a,a+n);//按照first排序
  int l=a[0].first,r=a[0].second;//初始第一个
  for(int i=1;i<n;i++){
    if(a[i].first<=r){//如果一部分在这个区间里则更新右端点
      r=max(r,a[i].second);
    }else{
      res1=max(res1,r-l);
      res2=max(res2,a[i].first-r);
      l=a[i].first;//不在需要再开一个新的区间更新此时的l,r
      r=a[i].second;
    }
  }
  res1=max(res1,r-l);//把最后一组数据也统计进来。或者特例只有一个数据,直接计算就行
  cout<<res1<<" "<<res2<<endl;
  return 0;
}

此题比较简单,思路很清晰,主要模拟为主,但是一些细节方面也挺多,注意一下就行,文章有错误的地方,恳请各位大佬指出,共同学习进步。

相关文章
|
2天前
|
算法
AcWing 1355. 母亲的牛奶(每日一题)
AcWing 1355. 母亲的牛奶(每日一题)
AcWing 2060. 奶牛选美(每日一题)
AcWing 2060. 奶牛选美(每日一题)
|
5月前
青蛙的约会—POJ1061
青蛙的约会—POJ1061
|
算法 Cloud Native
【刷题日记】875. 爱吃香蕉的珂珂
本次刷题日记的第 57 篇,力扣题为:875. 爱吃香蕉的珂珂,中等
141 0
【刷题日记】875. 爱吃香蕉的珂珂
|
测试技术 C++ Python
糖果-蓝桥杯19省赛
糖果-蓝桥杯19省赛
95 0
|
算法 C++ Python
每日算法系列【LeetCode 875】爱吃香蕉的珂珂
每日算法系列【LeetCode 875】爱吃香蕉的珂珂
|
人工智能
【寒假每日一题】AcWing 4700. 何以包邮?
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 0-1背包问题
135 0
|
机器学习/深度学习 Java C++
【寒假每日一题】AcWing 4818. 奶牛大学(补)
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
89 0
|
移动开发
【寒假每日一题】AcWing 4261. 孤独的照片(补)
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
83 0