Имеется набор данных, состоящий из троек положительных целых чисел. Необходимо выбрать из каждой тройки ровно одно число так, чтобы сумма всех выбранных чисел не делилась на k =123 и при этом была четной и минимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — максимально возможную сумму, соответствующую условиям задачи.
Входные данные.
Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество троек N (1 ≤ N ≤ 1 000 000). Каждая из следующих N строк содержит три натуральных числа, не превышающих 10 000.
Пример организации исходных данных во входном файле:
6
1 3 7
5 12 6
6 9 11
5 4 8
3 5 4
1 1 1
Для указанных входных данных, в случае, если k = 7, значением искомой суммы является число 20.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Данная задача решена на языке программирования - Pascal.
var s,a,b,c,m,i,n,min_d: int64;
d1,d2,d3,min_d array [1,2000000] of integer;
begin
assign (input,'input.txt');
readln(n);
s:=0;
j:=1;
for i:=1 to n do begin
readln(a,b,c);
m:=MIN(a,b,c);
d1[i]:=a-m;
if d1[i]<>0 then
begin
min_d[j]:=d1[i];
j:=j+1;
end;
d2[i]:=b-m;
if d2[i]<>0 then
begin
min_d[j]:=d1[i];
j:=j+1;
end;
d3[i]:=c-m;
if d3[i]<>0 then
begin
min_d[j]:=d1[i];
j:=j+1;
end;
s:=s+m;
end;
q:=j-1;
for i:=1 to q-1 do
for j:=2 to q do
if min_d[i]>min_d[j] then
begin
h:=min_d[i];
min_d[i]:=min_d[j];
min_d[j]:=h;
end;
if (s mod 123 <>0) and (s mod 2=0) then writeln(s)
else
for i:=1 to q do
begin
s:=s+min_d[i];
if (s mod 123 <>0) and (s mod 2=0) then begin writeln(s); break; end;
end;
end.
КЕГЭ