1.1 Milking Cows

      用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;
}

转载于:https://my.oschina.net/u/585691/blog/71776

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值