您的位置:首页 > 其它

USACO Section 1.2 Milking Cows

2013-11-23 15:30 309 查看
/*
ID: lucien23
PROG: milk2
LANG: C++
*/

#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;

typedef struct Milking
{
int start;
int end;

Milking(){}

Milking(int startTime,int endTime)
{
start=startTime;
end=endTime;
}
}Milking;

bool comparer(Milking milking1,Milking milking2)
{
return milking1.start <= milking2.start;
}

int main()
{
ifstream infile("milk2.in");
ofstream outfile("milk2.out");
if(!infile || !outfile)
{
cout<<"file operation failure!"<<endl;
return -1;
}

int N;
infile>>N;
Milking *milkings=new Milking
;
int startTime,endTime;
for (int i=0;i<N;i++)
{
infile>>startTime>>endTime;
milkings[i]=Milking(startTime,endTime);
}

//对区间进行排序
sort(milkings,milkings+N,comparer);

//求最大连续区间
int maxMilking=0,durMilking=0;
int startMilking=milkings[0].start;
int endMilking=milkings[0].end;
maxMilking=endMilking-startMilking;
for (int i=1;i<N;i++)
{
Milking currentMilking=milkings[i];
if(endMilking>=currentMilking.start && endMilking<currentMilking.end)
{
endMilking=currentMilking.end;
}
else if(endMilking<currentMilking.start)
{
durMilking=endMilking-startMilking;
if(durMilking>maxMilking)
maxMilking=durMilking;
startMilking=currentMilking.start;
endMilking=currentMilking.end;
}
}

//求最大连续空闲区间
int maxIdle=0,durIdle=0;
int startIdle=milkings[0].end;
for (int i=1;i<N;i++)
{
if(milkings[i].start>startIdle)
{
durIdle=milkings[i].start-startIdle;
if(durIdle>maxIdle)
maxIdle=durIdle;
startIdle=milkings[i].end;
}else{
startIdle=max(startIdle,milkings[i].end);
}
}

outfile<<maxMilking<<" "<<maxIdle<<endl;
delete[] milkings;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: