Вівторок, 17.10.2017, 02:42
Головна Реєстрація Вхід
Вітаю Вас, Гість · RSS
Меню сайту
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0
Форма входу
 Розбір задач
Задача 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.
Copyright MyCorp © 2017
Пошук
Календар
«  Жовтень 2017  »
ПнВтСрЧтПтСбНд
      1
2345678
9101112131415
16171819202122
23242526272829
3031
Архів записів
Друзі сайту
Обдаровані діти

Хмельницькі олімпіади

НМЦ ІКТ і ДН

Портал ХОІППО

Безкоштовний конструктор сайтів - uCoz