, заранее Вася готовит инвентарь для ролевой игры. В игре должны принять участие 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).
Формат вывода
Выведите одно целое число - минимальное количество значков, которое требуется подготовить.
2^3 < 10, 3^3 > 20
2) Если x(x+1) > 10, то (x+1)(x+2) < 10. Это верно при x = -4
(-4)(-3) = 12 > 10; (-3)(-2) = 6 < 10
Но при x = 2 будет ложная посылка (2*3 > 10 - это ложно),
из которой следует ложный вывод 3*4 < 10.
Поэтому импликация верна. ответ x = 2
3) Если x(x+1)(x+2) > 25, то x < x-1
Это сложнее. x < x-1 - ложно при любом х.
Импликация будет истинной, только если посылка ложная.
x(x+1)(x+2) > 25 - должно быть ложно. Это при x = 2.
x(x+1)(x+2) = 2*3*4 = 24.
const
n=20;
var
a:array[1..n] of integer;
i,imax,imin:integer;
s:longint;
begin
Randomize;
Writeln('Исходный ряд значений');
imax:=1; imin:=1;
for i:=1 to n do begin
a[i]:=Random(51)-25; Write(a[i],' ');
if a[i]>a[imax] then imax:=i
else
if a[i]<a[imin] then imin:=i
end;
Writeln;
if imax>imin then
Writeln('Максимальный элемент встретился позже минимального')
else begin
s:=0;
for i:=imax+1 to imin-1 do s:=s+a[i];
Writeln('Сумма элементов между максимальным и минимальным значением ',s)
end
end.
Тестовое решение:
Исходный ряд значений
10 -3 9 5 20 10 6 2 -19 -19 6 -24 -7 -1 23 11 -8 -16 -14 -25
Сумма элементов между максимальным и минимальным значением -27