第一个农民在 300 秒 (从 5 点开始计时) 给他的牛挤奶, 一直到 1000 秒。 第二个农民在 700 秒开始, 在 1200 秒结束。 第三个农民在 1500 秒开始, 2100 秒结束。
期间最长的至少有一个农民在挤奶的连续时间为 900 秒 (从 300 秒到 1200 秒), 而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为 300 秒 (从 1200 秒到 1500 秒)。
你的任务是编一个程序, 读入一个有n个农民挤n头牛的工作时间列表, 计算以下两点(均以秒为单位):
最长至少有一人在挤奶的时间段。最长的无人挤奶的时间段。 (从有人挤奶开始算起) 输入格式
第一行一个正整数n,接下来 n 行, 每行两个非负整数 l,r 表示一个农民的开始时刻与结束时刻。
输出格式一行, 两个整数, 即题目所要求的两个答案。
样例 输入数据#13 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< 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)