Маршрутное такси
В час пик на остановку одновременно подъехали три маршрутных такси, следующие по одному маршруту, в которые тут же набились пассажиры. Водители обнаружили, что количество людей в разных маршрутках разное, и решили пересадить часть пассажиров так, чтобы в каждой маршрутке было поровну пассажиров. Требуется определить, какое наименьшее количество пассажиров придется при этом пересадить.

Формат входных данных
Во входном файле записано три натуральных числа, не превосходящих 100 — количества пассажиров в первой, второй и третьей маршрутках соответственно.

Формат выходных данных
В выходной файл выведите одно число — наименьшее количество пассажиров, которое требуется пересадить. Если это невозможно, выведите слово IMPOSSIBLE (заглавными буквами).

Это одна из самых простых задач на олимпиаде.
Понятно, что для существования решения требуется, чтобы общее количество пассажиров было кратно трём.
Теперь, когда уже известно существование решения, найдём наименьшее количество пассажиров, которое придется пересадить. Пусть Cnt1, Cnt2, Cnt3 – количества пассажиров в первой, второй и третьей маршрутках соответственно, Cnt – среднее арифметическое Cnt1, Cnt2, Cnt3, а S=(|Cnt1-Cnt|+|Cnt2-Cnt|+|Cnt3-Cnt|). Несложно понять, что S – количество пассажиров, которых нужно пересадить, умноженное на два, т.е. ответом будет S div 2.

Текст программы (Паскаль):
var a,b,c,d,x:integer;
begin
writeln('a,b,c');
read(a,b,c);
if (a+b+c) mod 3<>0 then write('IMPOSSIBLE')
else
begin
d:=(a+b+c) div 3;
if a-d>b-d then x:=a-d else x:=b-d;
if c-d>x then x:=c-d;
end;
write(x);
end.

This site was made on Tilda — a website builder that helps to create a website without any code
Create a website