Это одна из самых простых задач на олимпиаде.
Понятно, что для существования решения требуется, чтобы общее количество пассажиров было кратно трём.
Теперь, когда уже известно существование решения, найдём наименьшее количество пассажиров, которое придется пересадить. Пусть 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.