Milking cows

基本思路:采用结构体数组存储所有数据,


/*

ID: boyshan1
PROG: milk2
LANG: C++
*/
#include <iostream>
#include <fstream>
using namespace std;
struct Farmer
{
int begin;
int end;
};
int main()
{
ofstream fout("milk2.out");
ifstream fin("milk2.in");
int N,n,i,j;
Farmer f[5000];
while(fin>>N)
{
n=0;
while(N!=0)
{
fin>>f[n].begin>>f[n].end;
n++;
N--;
}
Farmer temp;
if(n==1)    //特殊情况单独处理
{
fout<<f[n-1].end-f[n-1].begin<<" "<<0<<endl;
}
else
{
//先对每一组数据按开始时间升序原则进行排序
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(f[j].begin>f[j+1].begin)
{
temp=f[j];
f[j]=f[j+1];
f[j+1]=temp;
}
}
}
int c_time=f[0].end-f[0].begin; //c_time用来记录连续时间
int i_time=0;                              //i_time用来记录空闲时间
int start,ending,b;                     //start用来记录连续时间段中起始时间,ending记录结束时间
int continuous_time=0;
int idle_time=0;
start=f[0].begin;
ending=f[0].end;
for(i=1;i<n;i++)
{
if(f[i].begin<=ending)//两个时间段有重叠部分
{
if(f[i].end>=ending)
ending=f[i].end;
c_time=ending-start;
}
else                    //两个时间段没有重叠部分
{
                    i_time=f[i].begin-ending;      //空闲时间等于当前时间段的开始时间 减去 以上时间段的结束时间
                    b=f[i].end-f[i].begin;
if(b>c_time)
c_time=b;
start=f[i].begin;//更新start和ending
ending=f[i].end;
}
if(continuous_time<=c_time)
continuous_time=c_time;
if(idle_time<=i_time)
idle_time=i_time;
}
            fout<<continuous_time<<" "<<idle_time<<endl;
}
}
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值