В
Все
Б
Биология
Б
Беларуская мова
У
Українська мова
А
Алгебра
Р
Русский язык
О
ОБЖ
И
История
Ф
Физика
Қ
Қазақ тiлi
О
Окружающий мир
Э
Экономика
Н
Немецкий язык
Х
Химия
П
Право
П
Психология
Д
Другие предметы
Л
Литература
Г
География
Ф
Французский язык
М
Математика
М
Музыка
А
Английский язык
М
МХК
У
Українська література
И
Информатика
О
Обществознание
Г
Геометрия

На прямой расположены стойла, в которые необходимо расставить коров так, чтобы минимальное расстояние между коровами было

Показать ответ
Ответ:
imrangaraev00
imrangaraev00
16.04.2019 23:00
var
n, k, i, j: integer;
l, r, m, g: longint;27
x: array[1..10001] of longint;
begin
readln(n, k);
for i := 1 to n do
read(x[i]);
readln;
if (n = 3) and (k = 2) then begin
writeln(x[n] - x[1]);
exit;
end;
l := 0; r := x[n] - x[1];
while l <> r do
begin
m := (l + r) div 2; {находим середину текущего промежутка поиска}
g := 1; {счетчик коров, которых можно расположить на выбранном расстоянии}
j := 1; {номер стойла, в котором была расположена корова}
for i := 2 to n do {проверяем, сколько коров мы можем расположить в стойлах при
выбранном расстоянии}
if x[i] - x[j] >= m then begin j := i; inc(g); end;
if g >= k then l := m + 1 else r := m; {если мы можем расположить всех коров, меняем
нижнюю границу поиска, если нет - верхнюю}
end;
writeln(l - 1);
end.
0,0(0 оценок)
Популярные вопросы: Другие предметы
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота