В задаче надо найти два этажа, ближайших (снизу и сверху) к данному, N-му этажу, на котором останавливается лифт, и выбрать, на какой из них везти груз выгоднее. Для нахождения ближайшего нижнего этажа найдем целое A, такое что искомый этаж будет иметь номер (A*K + 1). Для этого надо разделить нацело (N-1) на K. И стоимостью подъема на нужный этаж N будет разность между этажами, помноженная на 200 (стоимость подъема на 1 этаж): 200*(N - (A*K+1)). Далее, ближайший сверху этаж, на котором останавливается лифт, будет иметь номер (A+1)*K + 1. Единственная проблема возникает, если он не существует, то есть (A+1)*K + 1 > M (в этом случае ответ уже получен). Если же этот этаж существует, то стоимость спуска будет равна 100 * ((A+1)*K + 1 - N). Выбрав минимум из двух стоимостей, получим искомый ответ.
Текст программы (Паскаль): var
m, n, k:longint;
a, res:longint;
begin
assign(input, '
a.in');
reset(input);
read(m, n, k);
close(input);
a:=(n-1) div k;
res:=200*(n-(a*k+1));
if ((a+1)*k+1<=m) and (res>100*((a+1)*k+1-n)) then
res:=100*((a+1)*k+1-n);
assign(output, 'a.out');
rewrite(output);
writeln(res);
close(output);
end.