Задача A
var
g1,h1,g2,h2,t1,t2,t,k,m,d,d1,d2:integer;
f1,f2:text;
begin
assign(f1,'z1.dat');assign(f2,'z1.sol'); reset(f1);rewrite(f2);
readln(f1, g1,h1,g2,h2); close(f1);
k:=0;
t1:=g1*60+h1; //переводимо час у хвлилини
t2:=g2*60+h2;
d1:=round(t1/30);d2:=round(t2/30); // Годинник відбиває удари d 48 разів, тоді момент часу
// у хвилинах, коли годнник буде відбивати чергову
// серію ударів – d*30. Відповідно початкова серія
// ударів почнеться у момент t1/30, а кінцева – t2/30
for d:=d1 to d2 do
begin
t:=d*30;
if d mod 2 = 1 then m:=1 else begin m:=(d mod 24) div 2; // якщо d – непарне - годинник
// б’є один раз, якщо парне, то кількість ударів
// обчислюємо за формулою:m:=(d mod 24) div 2
// для всіх випадків, крім 0:00 та 12:00, їх обробляємо окремо
if m=0 then m:=12
end;
if (t1<=t) and (t<=t2) then k:=k+m
end;
writeln(f2,k);
close(f2)
end.
Задача B
type mas=array[1..100000] of integer;
var
a:mas;
n,i,t1,t2,t3:integer; max:real;
f1,f2:text;
function s(x,y,z:integer):real; //функція обчислення площі трикутника
var p:real;
begin
p:=(x+y+z)/2;
s:=sqrt(p)*sqrt(p-x)*sqrt(p-y)*sqrt(p-z);
end;
procedure Qs(x,y :integer); // процедура швдкого сортування
var v,l,r,t:integer;
begin
l:=x; r:=y;
v:=a[(l+r) div 2];
while l<=r do begin
while a[l]>v do l:=l+1;
while a[r]<v do r:=r-1;
if l<=r then begin t:=a[l]; a[l]:=a[r];a[r]:=t; l:=l+1;r:=r-1 end;
end;
if x<r then Qs(x,r);
if l<y then Qs(l,y);
end;
begin
assign(f1,'z2.dat'); assign(f2,'z2.sol'); reset(f1);rewrite(f2);
readln(f1,n);
for i:=1 to n do
read(f1,a[i]);
Qs(1,n);
max:=0;
for i:=1 to n-2 do //Реалізація жадібного алгоритму на відсортованому масиві
if a[i]<a[i+1]+a[i+2]
then
if max<s(a[i],a[i+1],a[i+2]) then begin max:=s(a[i],a[i+1],a[i+2]);
t1:=a[i];t2:=a[i+1];t3:=a[i+2]
end;
if max=0 then writeln(f2,0) else writeln(f2,max:0:3,' ', t1,' ',t2,' ',t3);
close(f1);close(f2)
end.
Задача C
var
fi,fo:text;
n,m,k:integer; // длина, ширина и количество ходов
a:array[1..15,1..15] of byte; //игровое поле
ex,ey:array[1..60] of byte; //массив ходов первого
sx1,sy1,sx2,sy2:integer; //координаты первого и второго робота
dx,dy:integer; //направление движения по горизонтали и вертикали для второго в диапазоне(-1 0 1)
i,j:integer; //для циклов
win2:boolean; //флаг победы второго робота
begin
assign(fi,'input.txt'); reset(fi);
assign(fo,'output.txt'); rewrite(fo);
readln(fi,n,m,k);
for i:=n downto 1 do // читаем игровую матрицу. инвертируем счетчик по вертикали для совместимости с
for j:=1 to m do begin //// декартовой системой координат
read(fi,a[i,j]);
if (a[i,j]=3) then begin //если прочитан DIGIT
sx2:=j; // запоминаем координаты
sy2:=i;
a[i,j]:=1; // и заполняем ячейку в "пусто"
end;
if (a[i,j]=2) then a[i,j]:=1; //если CPU, просто очищаем
end;
for i:=1 to k do // читаем ходы CPU
readln(fi,ex[i],ey[i]);
win2:=false; // пока второй не выиграл
for i:=1 to k-1 do begin
sx1:=ex[i]; //CPU делает ход
sy1:=ey[i];
for j:=1 to 2 do begin // DIGIT делает два хода
dx:=(sx1-sx2); // определение направления движения по осям.
dy:=(sy1-sy2); // положительное значение - нужно двигаться по направлению оси, отрицательное - против
// 0 - движение неоптимально(роботы на одной оси)
if (dx<>0) then dx:=dx div abs(dx); // cведение к (-1, 1)
if (dy<>0) then dy:=dy div abs(dy); // если движение неоптимально, результат будет 0
if (dy<>0) then // если по OY оптимально
if (a[sy2+dy,sx2]=1) then begin sy2:=sy2+dy; continue; end; // и если не стена, делаем ход и (переходим ко второму ходу) или (выходим из цикла)
if (dx<>0) then // иначе если по ОУ хода не было, ходим по ОХ
if (a[sy2,sx2+dx]=1) then sx2:=sx2+dx; // если не стена - ходим
end;
if (sx1=sx2) and (sy1=sy2) then begin win2:=true; break; end;// если роботы встретились, игра закончена
end;
if (sx2=ex[k]) and (sy2=ey[k]) then win2:=true; // если первый добрался до выхода, но там стоял второй, то второй выиграл
if (win2=false) then
writeln(fo,'CPU')
else
writeln(fo,'DIGIT');
writeln(fo,sx2,' ',sy2);
close(fo);
end.