Прежде всего - у нас не принято цепляться к чужим темам, поэтому Ваш запрос выделен в отдельную тему.
Теперь по задаче. Ниже - одно из возможных решений. Суть алгоритма:
Начала и окончания дежурств сторожей переведены в формат абсолютных минут, начиная с полуночи. Далее построен цикл по всем минутам в сутках (их 1440), который прерывается, если текущей минуте не соответствует вахта ни одного из сторожей, либо по исчерпании полного количества минут в сутках (1440). Важно! Отрабатывается ситуация, когда дежурство сторожа проходит через полночь, т.е., например, начало - 23.00, окончание - 3.30.
Пути к файлам поставьте, естественно, свои.
Код:
CONST
Max_Number_Of_Guards=10;
VAR
f:Text;
Time_Table:Array[1..Max_Number_Of_Guards, 1..2] of Integer;
Number_Of_Guards:Byte;
i:Byte;
j:Word;
Start,Finish:Real;
b:Array[1..Max_Number_Of_Guards] of boolean;
b_sum:boolean;
BEGIN
Assign(f,'D:\Input.txt');
Reset(f);
Readln(f,Number_Of_Guards);
If Number_Of_Guards>Max_Number_Of_Guards then
begin
writeln('Too many guards! Edit the Input file or change Max_Number_Of_Guards');
readln;
HALT;
end;
For i:=1 to Number_Of_Guards do
begin
Readln(f,Start,Finish);
Time_Table[i,1]:=(Round(Start*100) div 100)*60+(Round(Start*100) mod 100);
Time_Table[i,2]:=(Round(Finish*100) div 100)*60+(Round(Finish*100) mod 100);
end;
Close(f);
j:=0;
Repeat
b_sum:=false;
For i:=1 to Number_Of_Guards do
begin
b[i]:=false;
If ((Time_Table[i,1]<Time_Table[i,2]) and
(j>=Time_Table[i,1]) and (j<=Time_Table[i,2])) OR
((Time_Table[i,1]>Time_Table[i,2]) and
(((j>=Time_Table[i,1]-1440) and (j<=Time_Table[i,2])) or
((j>=Time_Table[i,1]) and (j<=Time_Table[i,2]+1440)))) then
b[i]:=true;
b_sum:=b_sum or b[i];
end;
Inc(j);
Until (Not(b_sum)) or (j=1441);
Assign(f,'D:\Output.txt');
Rewrite(f);
If b_sum then writeln(f,'YES!') else writeln(f,'NO!');
Close(f);
END.