[USACO 1.2.1] Milking Cows 挤牛奶

[USACO 1.2.1] Milking Cows 挤牛奶,第1张

[USACO 1.2.1] Milking Cows 挤牛奶 题目描述

三个农民每天清晨 5 点起床, 然后去牛棚给三头牛挤奶

第一个农民在 300 秒 (从 5 点开始计时) 给他的牛挤奶, 一直到 1000 秒。 第二个农民在 700 秒开始, 在 1200 秒结束。 第三个农民在 1500 秒开始, 2100 秒结束。

期间最长的至少有一个农民在挤奶的连续时间为 900 秒 (从 300 秒到 1200 秒), 而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为 300 秒 (从 1200 秒到 1500 秒)。

你的任务是编一个程序, 读入一个有n个农民挤n头牛的工作时间列表, 计算以下两点(均以秒为单位):

最长至少有一人在挤奶的时间段。最长的无人挤奶的时间段。 (从有人挤奶开始算起) 输入格式

第一行一个正整数n,接下来 n 行, 每行两个非负整数 l,r 表示一个农民的开始时刻与结束时刻。

输出格式

一行, 两个整数, 即题目所要求的两个答案。

样例 输入数据#1
3
300 1000
700 1200
1500 2100
输出数据#1
900 300
数据范围

对于 100%的数据,1<=n<=5000, 0<=l<=r<=1e6。

AC代码:
#include  //万能头文件
using namespace std;
typedef long long ll;
const int N=1e6+5;
int n,le=N,ri=-1,ans,cnt,max1,max2;
bool flag[N];
struct sd{ //结构体表示坐标
    ll l,r;
}a[5005];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
    	cin>>a[i].l>>a[i].r;
    	if(a[i].l<=le) le=a[i].l;
    	if(a[i].r>=ri) ri=a[i].r;
    	for(ll j=a[i].l;jmax2) max2=cnt;
    		cnt=0;
		}
    	else if(flag[i]==false){
    		cnt++;
    		if(ans>max1) max1=ans;
    		ans=0;
		}
	}
    if (ans>max1) max1=ans;
    if (cnt>max2) max2=cnt;
    cout< 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714050.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存