В этом простом задании вы получаете входной массив L
неотрицательных целых чисел и количество бинов b
больше 0, но не больше длины L
. Ваш код должен возвращать новый массив M
, длина которого равна b
и которая содержит массив L
. Это проще всего объяснить на примерах.
L = [1,0,5,1]
и b = 2
возвращается M = [1,6]
.
L = [0,3,7,2,5,1]
и b = 3
возвращается M = [3,9,6]
.
Пока все просто. Однако в этом вопросе b
не обязательно делить len(L)
. В этом случае последний бин будет иметь меньше чисел, чтобы составить его.
Каждый бин, кроме, возможно, последнего, должен иметь одинаковое количество чисел, вносящих вклад в его общее количество. Последний бин должен иметь не больше чисел, способствующих этому, чем другие бины. В последнем бине должно быть как можно больше чисел, способствующих этому, в соответствии с другими правилами.
L = [0,3,7,2,5,1]
и b = 4
возвращается M = [3,9,6,0]
. M = [10,8,0,0]
не является приемлемым выводом, так как третий бин не имеет имени числа чисел, вносящих в него свой вклад в качестве бинов 1
и 2
.
L = [0,3,7,2,5]
и b = 2
возвращается M = [10,7]
. M = [3, 14]
не является приемлемым выводом, так как последний бин будет иметь 3
элементы, способствующие этому, но первый имеет только 2
.
L = [1,1,1,1,1,1,1]
и b = 3
возвращается M = [3,3,1]
.
Как последнее правило, ваш код должен работать за линейное время.
Вы можете использовать любой язык или библиотеки, которые вам нравятся, и можете предполагать, что ввод предоставляется любым удобным для вас способом.
Оказывается, есть некоторые входные данные, которые не могут быть решены. Например [1,1,1,1,1]
и b=4
. Ваш код может выводить все что угодно для этих входных данных.
your code must run in linear time
- Я нашел бы любой алгоритм, который не следует этому, естественно, довольно странно