Вступление
Давайте рассмотрим следующую последовательность (неотрицательные целые числа):
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
Например, давайте возьмем первые три числа. Это 0, 1, 2
. Числа, используемые в этой последовательности, можно упорядочить шестью различными способами:
012 120
021 201
102 210
Итак, допустим, что F (3) = 6 . Другой пример - F (12) . Это содержит номера:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Или каскадная версия:
01234567891011
Чтобы найти количество способов перестроить это, нам сначала нужно взглянуть на длину этой строки. Длина этой строки является 14
. Итак, мы вычисляем 14! , Однако, например, те могут поменяться местами, не нарушая окончательную строку. Есть 2 ноля, значит, 2! способы обнулить нули, не нарушая порядок. Также есть 4, так что есть 4! способы поменять. Мы делим сумму на эти два числа:
Это имеет 14! / (4! × 2!) = 1816214400 способов расстановки строк 01234567891011
. Таким образом, мы можем сделать вывод, что F (12) = 1816214400 .
Задание
Учитывая N , выведите F (N) . Для тех, кто не нуждается в представлении. Чтобы вычислить F (N), мы сначала конкатенируем первые N неотрицательных целых чисел (например, для N = 12 будет конкатенированная строка 01234567891011
) и вычисляем количество способов упорядочить эту строку.
Контрольные примеры
Input: Output:
0 1
1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800
11 119750400
12 1816214400
13 43589145600
14 1111523212800
15 30169915776000
Заметка
Вычислительный ответ должен быть вычислен в течение срока 10 секунд , скотина незначащих будет запрещен .
Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
10
цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
. Десять разных цифр, так что результат 10!
0
дело сбрасывало мой счет (глупые пустые строки).
F(N)
это не O(N!)
и что log F(N)
есть , O(log N!)
но это только предчувствия ...
10
правильного? Такое ощущение, что должно быть меньше 10 !, потому что именно здесь начинаются повторяющиеся цифры.