三个农民每天清晨5 点起床,然后去牛棚给3 头牛挤奶.第一个农民在300 时刻(从5 点开始计时,
秒为单位)给他的牛挤奶,一直到1000 时刻.第二个农民在700 时刻开始,在 1200 时刻结束.第三个
农民在1500 时刻开始2100 时刻结束.期间最长的至少有一个农民在挤奶的连续时间为900 秒(从
300 时刻到1200 时刻),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300 秒(从
1200 时刻到1500 时刻).
你的任务是编一个程序,读入一个有N 个农民(1 <= N <= 5000)挤N 头牛的工作时间列表,计算以下
两点(均以秒为单位):
• 最长至少有一人在挤奶的时间段.
• 最长的无人挤奶的时间段.
PROGRAM NAME: milk2
INPUT FORMAT
Line 1: 一个整数N.
Lines 2..N+1: 每行两个小于1000000 的非负整数,表示一个农民的开始时刻与结束时刻.
SAMPLE INPUT (file milk2.in)
3
300 1000
700 1200
1500 2100
OUTPUT FORMAT
一行,两个整数,即题目所要求的两个答案.
SAMPLE OUTPUT (file milk2.out)
秒为单位)给他的牛挤奶,一直到1000 时刻.第二个农民在700 时刻开始,在 1200 时刻结束.第三个
农民在1500 时刻开始2100 时刻结束.期间最长的至少有一个农民在挤奶的连续时间为900 秒(从
300 时刻到1200 时刻),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300 秒(从
1200 时刻到1500 时刻).
你的任务是编一个程序,读入一个有N 个农民(1 <= N <= 5000)挤N 头牛的工作时间列表,计算以下
两点(均以秒为单位):
• 最长至少有一人在挤奶的时间段.
• 最长的无人挤奶的时间段.
PROGRAM NAME: milk2
INPUT FORMAT
Line 1: 一个整数N.
Lines 2..N+1: 每行两个小于1000000 的非负整数,表示一个农民的开始时刻与结束时刻.
SAMPLE INPUT (file milk2.in)
3
300 1000
700 1200
1500 2100
OUTPUT FORMAT
一行,两个整数,即题目所要求的两个答案.
SAMPLE OUTPUT (file milk2.out)
900 300
/*
ID: letgoto1
PROG: milk2
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
#include<algorithm>
using namespace std;
const int N = 5000;
struct Milk
{
Milk():start(0), end(0){}
long start, end;
};
int cmp(const void *a, const void *b)
{
Milk *m1 = (Milk *)a;
Milk *m2 = (Milk *)b;
return m1->start - m2->start;
}
Milk milk[N];
int main()
{
ofstream fout ("milk2.out");
ifstream fin ("milk2.in");
unsigned n = 0; //number of people
fin >> n;
//read the data
int i = 0;
while(!fin.eof())
{
fin >> milk[i].start >> milk[i].end;
i++;
}
qsort(milk, n, sizeof(Milk), cmp);
long start = milk[0].start, end = milk[0].end;
long tOne = end - start, tNone = 0; //tOne is the time of at least one person milking
for(i = 1; i < n; i++)
{
if(milk[i].start <= end)
{end = max(milk[i].end, end);}
else
{
if(milk[i].start - end > tNone)
{tNone = milk[i].start - end;}
if(end - start > tOne)
{tOne = end - start;}
start = milk[i].start;
end = milk[i].end;
}
}
fout << tOne << " " << tNone;
fout <<endl;
return 0;
}