Этот вопрос имеет аналогичную настройку для поиска массива, который соответствует набору сумм, хотя цели его совершенно различны.
Рассмотрим массив 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 секунд)
Ответы:
Ржавчина , n ≈ 24
Требуется ночная ржавчина для удобной
reverse_bits
функции. Скомпилируйтеrustc -O unique.rs
и запустите (например)./unique 24
.источник
s
иs+1
в них?s
иs + 1
(так как вы сказали, что это единственные массивы, которые мы рассмотрим), хотя не сразу очевидно, будет ли это иметь значение.Common Lisp SBCL, N = 14
функция вызова (goahead ns)
вот время выполнения
источник
sbcl
нибудь вызвать его ?чистый
Конечно, не самый эффективный подход, но мне интересно посмотреть, насколько хорошо работает наивный фильтр значений.
Тем не менее, есть еще некоторые улучшения, которые будут сделаны с помощью этого метода.
Поместите в файл с именем
main.icl
или измените верхнюю строку наmodule <your_file_name_here>
.Компилировать с
clm -h 1500m -s 50m -fusion -t -IL Dynamics -IL StdEnv -IL Platform main
.Вы можете получить версию TIO (и меня), используя ссылку в заголовке, или более свежую версию здесь .
источник
s
? В ответе на вопрос « Для данного n ваш код должен выводить ответ для всех значений s от 1 до 9».