首页 > 代码库 > 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 挤牛奶
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。