USACO 1.2 Milking Cows(milk2) 程序
描述
三個農民每天清晨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:
(file milk2.in)
第一行:一個整數N。
第二行: 2..N+1:
每行兩個小於1000000的非負整數,表示一個農民的開始時刻與結束時刻。
OUTPUT FORMAT:
(file milk2.out)
僅一行,兩個整數,用空格分開,即題目所要求的兩個答案。 SAMPLE INPUT
3 300 1000 700 1200 1500 2100
SAMPLE OUTPUT
900 300
Executing… Test 1: TEST OK
\[0.011 secs, 1184 KB\]Test 2: TEST OK
\[0.000 secs, 1180 KB\]Test 3: TEST OK
\[0.000 secs, 1180 KB\]Test 4: TEST OK
\[0.011 secs, 1184 KB\]Test 5: TEST OK
\[0.108 secs, 1184 KB\]Test 6: TEST OK
\[0.000 secs, 1180 KB\]Test 7: TEST OK
\[0.000 secs, 1184 KB\]Test 8: TEST OK
\[0.011 secs, 1184 KB\]All tests OK.
Your program (‘milk2’) produced all correct answers! This is your submission #10 for this problem. Congratulations!
{
ID:ceeji
PROB:milk2
LANG:PASCAL
}
Program milk2;
Const
fin='milk2.in';
fou='milk2.out';
Var
n,i,j,a,c,i1,i2,j1,j2,max1,max2,n1,min,max:longint;
b:array[0..1000000]of boolean;
begin
assign(input,fin); reset(input);
assign(output,fou); rewrite(output);
readln(n);
fillchar(b,sizeof(b),0); min:=5000; max:=0;
for i:=1 to n do
begin
readln(a,c);
if a<min then min:=a;
if c>max then max:=c;
for j:=a+1 to c do
b[j]:=true;
end;
close(input);
max1:=0; max2:=0; n1:=0;
for i:=min+1 to max do
begin
if ((i=1)or(b[i-1]=false))and(b[i]) then n1:=1
else if b[i] then inc(n1);
if n1>max1 then max1:=n1;
end;
n1:=0;
for i:=min+1 to max do
begin
if ((i=1)or(b[i-1]=true))and(b[i]=false) then n1:=1
else if b[i]=false then inc(n1);
if n1>max2 then max2:=n1;
end;
writeln(max1,' ',max2);
close(output);
end.
© 轉載需附帶本文連結,依 CC BY-NC-SA 4.0 釋出。