Этот вопрос имеет аналогичную настройку для поиска массива, который соответствует набору сумм, хотя цели его совершенно различны.
Рассмотрим массив A
длины n
. Массив содержит только натуральные числа. Например A = (1,1,2,2)
. Определим f(A)
как множество сумм всех непустых непрерывных подмассивов A
. В этом случае f(A) = {1,2,3,4,5,6}
. Шаги для производства f(A)
следующие:
Подмассивы A
есть (1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)
. Их соответствующие суммы 1,1,2,2,2,3,4,4,5,6
. Таким образом, набор, который вы получаете из этого списка {1,2,3,4,5,6}
.
Мы называем массив A
уникальным, если нет другого массива B
такой же длины f(A) = f(B)
, кроме массива в A
обратном порядке. Как пример, f((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}
но нет другого массива длины, 3
который производит тот же набор сумм.
Мы будем рассматривать только массивы, в которых элементы являются заданным целым числом s
или s+1
. Например, если s=1
массивы будут содержать только 1
и 2
.
задача
Задача для заданного n
и s
состоит в том, чтобы подсчитать количество уникальных массивов этой длины. Вы можете предположить, что s
между 1
и 9
.
Вы не должны считать обратный массив, а также сам массив.
Примеры
s = 1
ответ всегда n+1
.
s = 2
, ответы считая от n = 1
:
2,3,6,10,20,32,52,86
s = 8
, ответы считая от n = 1
:
2,3,6,10,20,36,68,130
Гол
Для данного n
, ваш код должен выводить ответ для всех значений s
от 1
до 9
. Ваша оценка - это наибольшее значение, n
для которого это завершается за одну минуту.
тестирование
Мне нужно будет запустить ваш код на моей машине с Ubuntu, поэтому, пожалуйста, включите как можно более подробные инструкции по компиляции и запуску вашего кода.
Leaderboard
- Андерс Касеорг в Русте n = 24 (34 секунды)
- n = 16 от Ourous in Clean (36 секунд)
- n = 14 от JRowan в Common Lisp (49 секунд)