Выведите минимальный радиус освещения d, который необходим, чтобы осветить всю улицу - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Помогите решить задачу: Ваня идет поздней ночью по прямолинейной улице длины l, которая освещается n фонарями. Введём систему координат, в которой начало улицы соответствует точке 0, а её конец — точке l. Тогда i-й фонарь находится в точке ai. Фонарь освещает все точки улицы, которые находятся от него на расстоянии не больше d, где d — некоторое положительное число, общее для всех фонарей. Ваня хочет узнать, какой минимальный радиус освещения d должен быть у фонарей, чтобы вся улица была освещена.

Входные данные

В первой строке записаны два целых числа n, l (1 ≤ n ≤ 1000, 1 ≤ l ≤ 109) — количество фонарей и длина улицы соответственно. В следующей строке записано n целых чисел ai (0 ≤ ai ≤ l). Несколько фонарей могут находиться в одной точке. Фонари могут находиться в концах улицы.

Выходные данные

Выведите минимальный радиус освещения d, который необходим, чтобы осветить всю улицу. Ответ будет считаться правильным, если его абсолютная или относительная погрешность не превышает 10 - 9

Примеры тестов

входные данные

7 15 15 5 3 7 9 14 0

выходные данные

2.5000000000

входные данные

2 5 2 5

выходные данные

2.0000000000

Примечание

Рассмотрим второй пример. При d = 2 первый фонарь будет освещать отрезок [0, 4] улицы, а второй — отрезок [3, 5]. Таким образом, вся улица будет освещена.

Решение задачи: «Выведите минимальный радиус освещения d, который необходим, чтобы осветить всю улицу»

textual
Листинг программы
const mn=1000;
var
  a: array [1..mn] of Longint;
  l, t: Longint;
  n, i, j: Integer;
begin
  ReadLn(n,l);
  for i:=1 to n do begin
    Read(a[i]);
    for j:=i downto 2 do
      if a[j-1]>a[j] then begin
        t:=a[j-1]; a[j-1]:=a[j]; a[j]:=t;
      end else Break;
  end;
  t:=0; for i:=2 to n do if t<a[i]-a[i-1] then t:=a[i]-a[i-1];
  if t<2*a[1] then t:=2*a[1];
  if t<2*(l-a[n]) then t:=2*(l-a[n]);
  WriteLn(t/2:0:1);
end.

Объяснение кода листинга программы

  1. Объявлены следующие константы и переменные: — mn=1000 - количество элементов в массиве; — l, t = 0 - счетчик количества элементов, используемых для расчета минимального радиуса освещения; — n, i, j = 0 - счетчики количества элементов для обработки массива.
  2. Считывается количество элементов массива и первый элемент массива.
  3. Для каждого элемента массива выполняется следующая последовательность действий: — считывается элемент массива; — выполняется сортировка массива по возрастанию с использованием алгоритма сортировки пузырьком; — если отсортированный массив уже полностью отсортирован (достигнут конец массива), то сортировка завершена.
  4. Находится минимальное значение разности между соседними элементами массива.
  5. Если минимальное значение разности меньше двухкратного значения первого элемента массива, то считается, что освещение требуется только для части улицы, и вычисляется минимальный радиус освещения как половина минимального значения разности.
  6. Если минимальное значение разности больше двухкратного значения первого элемента массива, то считается, что освещение требуется для всей улицы, и вычисляется минимальный радиус освещения как двукратное значение разности между последним и предпоследним элементами массива.
  7. Выводится значение минимального радиуса освещения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы