Поиск по этому блогу

вторник, 26 января 2021 г.

Задача КИМ №27 (Решение на Паскале)

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

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

Пример входного файла:

6
1 3
5 12
6 9
5 4
3 3
1 1
Для указанных входных данных значением искомой суммы должно быть число 20.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.

Решение

1) В каждой паре ищется минимальное число (условие, что сумма должна быть минимальной) и добавляется в сумму.
2) Чтобы учесть второе условие - сума должна не делиться на 3, мы  ищем минимальную разность между парными числами по абсолютной величине, не делящуюся на 3.
3) Если сумма не делится на 3, выводим ее, иначе добавляем к ней минимальную разность и выводим результат.

var i,n,d,s,m,r,a,b:integer;
f:text;
begin
assign(f,'27-1b.txt');
reset(f);
d:=3;
s:=0;m:=10001;
readln(f,n);
for i:=1 to n do
begin
readln(f,a,b);
if a<b then s:=s+a else s:=s+b;
r:=abs(a-b);
if r mod d > 0 then if r<m then m:=r;
end;
if s mod d <>0 then write(s) else write(s+m);
close(f);
end.

Для файла 27-1a.txt результат 67303
Для файла 27-1b.txt результат  200157496

Комментариев нет:

Отправить комментарий