Тренировка решения задания 27 ЕГЭ по информатике (27.7), вторая часть

27 задание ЕГЭ экзамена 2020 г (со слов учащегося):
Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности, разность которых чётна, и в этих парах, по крайней мере, одно из чисел пары делится на 35. Порядок элементов в паре неважен. Среди всех таких пар нужно найти и вывести пару с максимальной суммой элементов. Если одинаковую максимальную сумму имеет несколько пар, можно вывести любую из них. Если подходящих пар в последовательности нет, нужно вывести два нуля.
 

✍ Решение:

  • Программа эффективна по времени и памяти
  • Паскаль (PascalABC):

    const
      p = 35;
     
    var
      n, i, x, k35n, k35chet, n35chet, n35n, m1, m2: integer;
     
    begin
      readln(n); {количество чисел}
      readln(x); {первое число}
      // обнуление всех переменных
     
      k35chet := 0; // четный кратный
      n35chet := 0; // четный некратный
      k35n := 0; // нечетный кратный
      n35n := 0; // нечетный некратный
      m1 := 0; m2 := 0; // максимальные
      // цикл до n - 1, т.к. первое число уже считали
      for i := 1 to n - 1 do
      begin
        // проверка, если четный и кратный
        if (x mod p = 0) and (x mod 2 = 0) and (x > k35chet) then
        begin
          k35chet := x;
        end;
        // проверка, если четный и некратный
        if (x mod p <> 0) and (x mod 2 = 0) and (x > n35chet) then
        begin
          n35chet := x;
        end;
        // проверка, если нечетный и кратный
        if (x mod p = 0) and (x mod 2 = 1) and (x > k35n) then
        begin
          k35n := x;
        end;
        // проверка, если нечетный и некратный  
        if (x mod p <> 0) and (x mod 2 = 1) and (x > n35n) then 
        begin
          n35n := x;
        end;
     
        readln(x); // считываем очередное число
        // если x кратно и есть такое некратное n35chet, сумма с которым была бы больше чем m1 + m2
        if (x mod p = 0) and ((x + n35chet) mod 2 = 0) and (x + n35chet > m1 + m2) and (n35chet > 0) then
        begin
          m1 := x; m2 := n35chet;
        end;
        // если x кратно и есть такое некратное n35n, сумма с которым была бы больше чем m1 + m2
        if (x mod p = 0) and ((x + n35n) mod 2 = 0) and (x + n35n > m1 + m2) and (n35n > 0) then
        begin
          m1 := x; m2 := n35n;
        end;
        // если есть такое кратное k35n, сумма с которым была бы четной и больше чем m1 + m2
        if ((x + k35n) mod 2 = 0) and (x + k35n > m1 + m2) and (k35n > 0) then
        begin
          m1 := x; m2 := k35n;
        end;
        // если есть такое кратное k35chet, сумма с которым была бы четной и больше чем m1 + m2
        if ((x + k35chet) mod 2 = 0) and (x + k35chet > m1 + m2) and (k35chet > 0) then
        begin
          m1 := x; m2 := k35chet;
        end;
      end;
      writeln(m1, ' ', m2)
    end.