Путешественник должен остановиться на n дней в отеле за городом. У него нет денег, а срок действия его кредитной карты истек. Но у него золотая цепочка с n звеньями.
Правило в этом отеле состоит в том, что жители должны платить за квартиру каждое утро. Путешественник приходит к соглашению с менеджером по оплате одного звена золотой цепочки за каждый день. Но менеджер также требует, чтобы путешественник наносил наименьший ущерб цепи при оплате каждый день. Другими словами, он должен найти решение, чтобы сократить как можно меньше ссылок.
Разрезание ссылки создает три подцепи: одну, содержащую только ссылку обрезки, и одну на каждой стороне. Например, разрезание третьего звена цепочки длиной 8 создает подцепи длины [2, 1, 5]. Менеджер рад внести изменения, поэтому путешественник может оплатить первый день цепочкой длины 1, а затем второй день цепочкой длины 2, получая первую цепочку обратно.
Ваш код должен вводить длину n и выводить список ссылок для вырезания минимальной длины.
Правила :
- n является целым числом> 0.
- Вы можете использовать индексацию на основе 0 или 1 для ссылок.
- Для некоторых чисел решение не является уникальным. Например, если
n = 15
оба[3, 8]
и[4, 8]
являются действительными выходами. - Вы можете либо вернуть список, либо распечатать его с любым разумным разделителем.
- Это код-гольф , поэтому выигрывает самый короткий код в байтах.
Тестовые случаи :
Input Output (1-indexed)
1 []
3 [1]
7 [3]
15 [3, 8]
149 [6, 17, 38, 79]
Подробный пример
Для n = 15 обрезка звеньев 3 и 8 приводит к подцепям длины [2, 1, 4, 1, 7]
. Это правильное решение, потому что:
1 = 1
2 = 2
3 = 1+2
4 = 4
5 = 1+4
6 = 2+4
7 = 7
8 = 1+7
9 = 2+7
10 = 1+2+7
11 = 4+7
12 = 1+4+7
13 = 2+4+7
14 = 1+2+4+7
15 = 1+1+2+4+7
Не существует решения с одним разрезом, так что это оптимальное решение.
добавление
Обратите внимание, что эта проблема связана с целочисленным разбиением. Мы ищем разбиения P из п , что все целые числа от 1 до п , по крайней мере , один patition , который является подмножеством P .
Вот видео на YouTube об одном из возможных алгоритмов этой проблемы.
1+2
. Откуда появилась вторая 2-звенная цепь?