首页 > 代码库 > codevs——1385 挤牛奶

codevs——1385 挤牛奶

1385 挤牛奶

 

USACO

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 青铜 Bronze
 
 
题目描述 Description

三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300时刻(从5点开始计时,秒为单位)给他的牛挤奶,一直到1000时刻。第二个农民在700时刻开始,在 1200时刻结束。第三个农民在1500时刻开始2100时刻结束。期间最长的至少有一个农民在挤奶的连续时间为900秒(从300时刻到1200时刻),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300秒(从1200时刻到1500时刻)。

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

技术分享最长至少有一人在挤奶的时间段。
技术分享最长的无人挤奶的时间段。 
输入描述 Input Description

Line 1:

一个整数N。

Lines 2..N+1:

每行两个小于1000000的非负整数,表示一个农民的开始时刻与结束时刻。

输出描述 Output Description

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

样例输入 Sample Input

3
300 1000
700 1200
1500 2100
 

样例输出 Sample Output

900 300

数据范围及提示 Data Size & Hint
 

本来想用个高大上的做法来做来

结果wa了一下午!!

枚举!!!

#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define N  1000010using namespace std;int n,s1=999999999,s2,ans1,ans2,sum1,sum2;int begin,end,a[N];int read(){	int x=0,f=1; char ch=getchar();	while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘) f=-1; ch=getchar();}	while(ch<=‘9‘&&ch>=‘0‘){x=x*10+ch-‘0‘; ch=getchar();}	return x*f;}int main(){	n=read();	for(int i=1;i<=n;i++)	{		begin=read(),end=read();		for(int j=begin;j<end;j++)		 a[j]=1;		s1=min(s1,begin);		s2=max(s2,end);	}	for(int i=s1;i<=s2;i++)	{		if(a[i]==1)		{			ans2=max(ans2,sum2);			sum2=0;			sum1++;		}		else		{			ans1=max(ans1,sum1);			sum1=0;			sum2++;		}	}	printf("%d %d",ans1,ans2);	return 0;}

  

codevs——1385 挤牛奶