Паскаль! Помогите пожалуйста!
Провода
Дано N отрезков провода длиной L1, L2, …, LN сантиметров. Требуется с помощью разрезания получить из них K равных отрезков как можно большей длины, выражающейся целым числом сантиметров. Если нельзя получить K отрезков длиной даже 1 см, вывести 0.

Ограничения: 1 <= N <= 10 000, 1 <= K <= 10 000, 100 <= Li <= 10 000 000, все числа целые.

Входные данные
В первой строке находятся числа N и К. В следующих N строках — L1, L2, …, LN, по одному числу в строке.

Выходные данные
Вывести одно число — полученную длину отрезков.

Ответ учителя по предмету Информатика

// PascalABC.NET 3.2, сборка 1379 от 21.01.2017

// Внимание! Если программа не работает, обновите версию!

begin

  var ЕстьКусков,НадоКусков:integer;

  Readln(ЕстьКусков,НадоКусков);

  var Длины:=ReadArrInteger(ЕстьКусков);

  var ОбщаяДлина:=Длины.Sum;

  if НадоКусков>ОбщаяДлина then Writeln(0)

  else begin

    var ДлинаКуска:=ОбщаяДлина div НадоКусков;

    repeat

      if Длины.Select(Кусок->Кусок div ДлинаКуска).Sum >=НадоКусков then break

      else ДлинаКуска-=1;

    until false;

    writeln(ДлинаКуска)

    end

end.

Пример

4 11

802 743 457 539

200

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Похожие вопросы от пользователей