, заранее Вася готовит инвентарь для ролевой игры. В игре должны принять участие N игроков, каждый из которых будет изображать персонажа фантастического мира. В процессе игры каждый персонаж будет обладать некоторым уровнем X
, который представляет собой целое число от 1 до M.
Для обозначения уровня планируется использовать специальные значки двух цветов. Белый значок обозначает один уровень, а красный значок - K
уровней. Игрок, изображающий персонажа с уровнем X, должен иметь A белых значков и B красных значков, чтобы сумма (A+B⋅K)была равна X. При этом персонажу не разрешается иметь более чем (K−1) белых значков.
Значки для игры готовятся заранее, однако уровни персонажей заранее неизвестны. Для успешного проведения игры всем персонажам необходимо выдать соответствующее их уровням количество значков. Возникает вопрос: какое минимальное суммарное количество значков необходимо подготовить для успешного проведения игры при любых уровнях участвующих персонажей.
Требуется написать программу, которая по заданным числам N,M и K
вычисляет минимальное количество значков, которое необходимо подготовить для успешного проведения игры.
Формат ввода:
Дано три целых числа: N, M и K(1≤N≤104,1≤M≤105,1≤K≤105).
Формат вывода
Выведите одно целое число - минимальное количество значков, которое требуется подготовить.
i, j, k, n: integer;
m: array[1..1023] of byte;
begin
Write('Введите натуральное число: ');
Readln(n);
k := 1;
m[1] := 1;
j := 2;
while j <= n do
begin
for i := 1 to k do
begin
if m[i] = 1 then m[j] := 0 else m[j] := 1;
j := j + 1
end;
k := k * 2
end;
Writeln('Отладочная выдача всей последовательности');
for i := 1 to n do Write(m[i]);
Writeln;
Write(n, '-й член последовательности равен ', m[n]);
Writeln(', два предыдущих равны ', m[n - 2], ' и ', m[n - 1])
end.
Тестовое решение:
Введите натуральное число: 50
Отладочная выдача всей последовательности
10010110011010010110100110010110011010011001011010
50-й член последовательности равен 0, два предыдущих равны 0 и 1