Вказівки щодо розв'язання завдання № 14
відбірково-тренувальних зборів
команди міста Києва

14.1. Прогресія (впорядкування методом обліку)

  1. Впорядкувати масив різних цілих чисел методом обліку масивом множин.

  2. Перебрати всі можливі пари: різниця + перший елемент.

  3. Оптимізувати перебір відкиданням тих пар, які задають члени вже знайдених прогресій максимальної довжини.

Авторське розв'язання має такий вигляд.

const n_=500000;  n256=n_ div 256;
  var s: array [0..n256] of set of byte;  {Данi про множину}
      d,                    {Рiзниця арифметичної прогресiї}
      j, {Найбiльша знайдена довжина арифметичної прогресiї}
      k,             {Зчитане число або 1-ий член прогресiї}
      l,  {Кiлькiсть елементiв множини або членiв прогресiї}
    max,                        {Найбiльший елемент множини}
      n: longint;              {Кiлькiсть елементiв множини}
   incl: boolean;{Чи можна знайти ще один елемент прогресії}
      o: text;                                        BEGIN
assign(o,'SEQUENCE.IN');  reset(o);
read(o,n);  for l:= 1 to n do begin
read(o,k);  if max < k then max:=k;
include(s[k div 256],k mod 256) end;               close(o);
assign (o,'SEQUENCE.OUT');  rewrite(o);  j:=0;  k:=1;
repeat d:=1;  if (k mod 256) in s[k div 256] then
  repeat l:=1;  if (k < d) or
    not (((k-d) mod 256) in s[(k-d) div 256]) then    begin
    if k+l*d<=n_ then
    repeat incl:=k+l*d<=n_;
      if incl then                                    begin
      if ((k+l*d) mod 256) in
        s[(k+l*d) div 256] then inc(l)
                           else incl:=false             end;
    until not incl                                      end;
    if l> j then begin rewrite(o);  j:=l end;
    if l>=j then writeln (o,l,' ',k,' ',d);
    inc(d);
  until max < k+(j-1)*d;
  inc(k);
until k+j-1>max; close(o)                               END.

14.2. Поверхня куба (аналітична геометрія)

  1. Подати поверхню куба розгорткою, тобто для кожної грані визначити формули переходу від координат 3-вимірного простору до координат 2-вимірної розгортки.

  2. Замінити перехід з однієї грані на іншу через точку ребра, що має два образи на розгортці, ламаною без самоперетинів, всі ланки якої належать периметру многокутника-розгортки.

  3. Обчислити остачу вiд дiлення на подвоєну площу всієї поверхні куба площу частини поверхні куба, обмеженої ламаною, як остачу суми доданків xj yj + 1 – yj xj + 1.

Тут (xj; yj ) — координати j-ої вершини образу ламаної на розгортці (перша вершина збігається з останньою).