codevs——1385 挤牛奶

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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  1000010
using 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 挤牛奶的主要内容,如果未能解决你的问题,请参考以下文章

Cogs 465. 挤牛奶

洛谷P1204 [USACO1.2]挤牛奶Milking Cows

挤牛奶

挤牛奶 milking

USACO挤牛奶

1343. 挤牛奶难度: 一般 / 模拟 区间合并