Pascal. Задача 8-38
Имеется набор данных, состоящих из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 6 и при этом была минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — минимально возможную сумму, соответствующую условиям задачи.
Входные данные. Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000. Пример организации исходных данных во входном файле:
6
1 3
5 12
6 9
5 4
3 3
1 1
Для указанных входных данных значением искомой суммы должно быть число 20.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
var
f : text;
N, i, a, b, minsum, mindiff : integer;
begin
Assign(f, 'C:\PABCWork.NET\test-8-37-B.txt');
Reset(f);
Readln(f, N);
minsum := 0;
mindiff := 10001;
for i := 1 to N do begin
Readln(f, a, b);
minsum := minsum + Min(a, b);
a := abs(a - b);
if (a < mindiff) and (a mod 6 <> 0) then
mindiff := a;
end;
Close(f);
if minsum mod 6 = 0 then minsum := minsum - mindiff;
Writeln(minsum);
end.