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.
当前页阅读量为: