Pascal. Задача 8-37

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 3 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи.

Входные данные. Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000. Пример организации исходных данных во входном файле:

6
1  3
5  12
6  9
5  4
3  3
1  1

Для указанных входных данных значением искомой суммы должно быть число 32.

В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.

Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.

Ответ
127127 399762080
Решение
var
  f : text;
  N, i, a, b, maxsum, mindiff : integer;
begin
  Assign(f, 'C:\PABCWork.NET\test-8-37-A.txt');
  Reset(f);
  Readln(f, N);
  maxsum := 0;
  mindiff := 10001;
  for i := 1 to N do begin
    Readln(f, a, b);
    maxsum := maxsum + Max(a, b);
    a := abs(a - b);
    if (a < mindiff) and (a mod 3 <> 0) then
      mindiff := a;
  end;
  Close(f);
  if maxsum mod 3 = 0 then maxsum := maxsum - mindiff;
  Writeln(maxsum);
end.