用arr1[i],arr2[i]分别保存第i个农民的工作开始,结束时间,为方便后面的计算,应该把每个农民工作开始时间按升序排列。可以在输入每个农民工作起止时间的时候使用插入排序的方法给其排序。排序好以后,以第一个农民的起始工作时间为start,工作结束时间为end,和下一个农民的工作时间比较,在时间断开的时候,计算出连续的有人工作时间和无人工作时间,然后重置start和end;时间未断开则继续和下一个农民的工作时间比较。输出的是连续的有人工作时间和无人工作时间的最大值。
/*
ID: whutzha1
PROG: milk2
LANG: C++
*/
#include<fstream>
using namespace std;
ifstream cin("milk2.in");
ofstream cout("milk2.out");
int main()
{
int arr1[5000];
int arr2[5000];
int n,i,a,b,j,k;
cin>>n;
cin>>arr1[0]>>arr2[0];
for (i=1;i<n;i++)
{
cin>>a>>b;
for(j=i-1;j>=0;j--)
{
if(a<arr1[j]) {;}
else
{
for(k=i-1;k>j;k--)
{ arr1[k+1]=arr1[k];arr2[k+1]=arr2[k];}
arr1[j+1]=a;
arr2[j+1]=b;
break;
}
}
if (j==-1)
{
for(k=i-1;k>j;k--)
{ arr1[k+1]=arr1[k];arr2[k+1]=arr2[k];}
arr1[j+1]=a;
arr2[j+1]=b;
}
}
int start,end,time1=0,time2=0,max1=0,max2=0;
start=arr1[0];end=arr2[0];
for (i=1;i<n;i++)
{
if (arr1[i]<=end)
{
if (arr2[i]<end) {;}
else { end=arr2[i];}
}
else
{
time1=end-start;
if (time1>max1) max1=time1;
time2=arr1[i]-end;
if (time2>max2) max2=time2;
start=arr1[i];end=arr2[i];
}
}
time1=end-start;
if (time1>max1) max1=time1;
cout<<max1<<" "<<max2<<endl;
return 0;
}