Это продолжение массивов Count, которые создают уникальные наборы . Существенным отличием является определение уникальности.
Рассмотрим массив 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который производит тот же набор сумм.
задача
Задача для заданного nи sсостоит в том, чтобы подсчитать количество уникальных массивов этой длины. Вы можете предположить, что sмежду 1и 9. Вам нужно только посчитать массивы, где элементы являются либо заданным целым числом, sлибо s+1. Например, если s=1подсчитываемые вами массивы содержат только 1и 2. Однако определение уникальности относится к любому другому массиву такой же длины. Как конкретный пример не[1, 2, 2, 2] является уникальным, поскольку он дает тот же набор сумм, что и .[1, 1, 2, 3]
Вы должны рассчитывать как обратную сторону массива, так и сам массив (если, конечно, массив не является палиндромом).
Примеры
s = 1ответы для n = 2,3,4,5,6,7,8,9:
4, 3, 3, 4, 4, 5, 5, 6
Для s = 1, уникальные массивы длины 4 являются
(1, 1, 1, 1)
(2, 1, 1, 2)
(2, 2, 2, 2)
s = 2ответы для n = 2,3,4,5,6,7,8,9:
4, 8, 16, 32, 46, 69, 121, 177
Пример массива, который не уникален с s = 2:
(3, 2, 2, 3, 3, 3).
Это имеет тот же набор сумм, что и оба: (3, 2, 2, 2, 4, 3)и (3, 2, 2, 4, 2, 3).
s = 8ответы для n = 2,3,4,5,6,7,8,9:
4, 8, 16, 32, 64, 120, 244, 472
Гол
Для данного n, ваш код должен выводить ответ для всех значений sот 1до 9. Ваша оценка - это наибольшее значение, nдля которого это завершается за одну минуту.
тестирование
Мне нужно будет запустить ваш код на моей машине с Ubuntu, поэтому, пожалуйста, включите как можно более подробные инструкции по компиляции и запуску вашего кода.
Leaderboard
- Кристиан Сиверс из Хаскелла, n = 13 (42 секунды)
s? Что это представляет?