【USACO1.2_1】★Milking Cows 挤牛奶
2014-04-07 16:05
337 查看
三个农民每天清晨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)
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
;
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;
}
秒为单位)给他的牛挤奶,一直到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
;
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;
}
相关文章推荐
- [USACO1.2]挤牛奶Milking Cows 差分
- 【区间计数】Milking Cows 挤牛奶 (milk2) Usaco_Training 1.2
- 【区间计数】Milking Cows 挤牛奶 (milk2) Usaco_Training 1.2
- USACO 1.2 Milking Cows (归并排序+离散化)
- USACO 1.2 Milking Cows (枚举)
- usaco 1.2:Milking Cows
- USACO 1.2 Milking Cows (milk2)
- USACO 1.2-Milking Cows
- USACO--1.2 Milking Cows
- USACO1.2 Milking Cows
- USACO 1.2_挤牛奶_离散
- USACO1.2.1 Milking Cows(挤牛奶)
- 【模拟】洛谷 P1204 [USACO1.2]挤牛奶Milking Cows
- USACO 1.2 Milking Cows
- USACO 1.2 MILKING COWS
- 【洛谷P1204】【USACO1.2】挤牛奶Milking Cows
- USACO——Milking Cows 挤牛奶
- [USACO1.2]挤牛奶Milking Cows
- USACO-Section 1.2 Milking Cows[数组模拟]
- USACO-Section1.2 Milking Cows