Фон
Перестройка Неравенство является неравенство, которое основано на перестановкой чисел. Если у меня есть два списка чисел одинаковой длины, x 0 , x 1 , x 2 ... x n-1 и y 0 , y 1 , y 2 ... y n-1 одинаковой длины, где I разрешено переставлять числа в списке, способ максимизировать сумму x 0 y 0 + x 1 y 1 + x 2 y 2 + ... + x n-1 y n-1 состоит в сортировке 2 списков в неубывающий порядок.
Прочитайте статью Wikipedia здесь.
задача
Вы бы написали программу, которая принимает входные данные из STDIN, или функцию, которая принимает 2 массива (или связанных контейнеров) чисел (одинаковой длины).
Предполагая, что вы пишете функцию, которая принимает 2 массива (a и b), вы найдете количество способов, которыми вы можете переставить числа во втором массиве (b), чтобы максимизировать:
a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+...+a[n-1]*b[n-1]
В этом случае, если массив b равен [1 0 , 2 1 , 2 2 , 3 3 , 3 4 ] (индексы для наглядности),
[1 0 , 2 1 , 2 2 , 3 3 , 3 4 ],
[1 0 , 2 1 , 2 2 , 3 4 , 3 3 ], (поменяйте местами 3)
[1 0 , 2 2 , 2 1 , 3 3 , 3 4 ] (поменяйте местами 2)
[1 0 , 2 2 , 2 1 , 3 4 , 3 3 ] (поменяйте местами 3 и поменяйте местами 2)
считаются разными мероприятиями. Сам исходный массив также считается возможной перестановкой, если он также максимизирует сумму.
Для ввода STDIN вы можете предположить, что длина массивов указана перед массивами (просьба указать, что вы используете их), или что массивы указаны в разных строках (также укажите, пожалуйста).
Вот 4 возможных входа (для удобства):
5 1 1 2 2 2 1 2 2 3 3 (length before arrays)
1 1 2 2 2 1 2 2 3 3 (the 2 arrays, concatenated)
1 1 2 2 2
1 2 2 3 3 (the 2 arrays on different lines)
5
1 1 2 2 2
1 2 2 3 3 (length before arrays and the 2 arrays on different lines)
Для вывода вы можете вернуть ответ (если вы пишете функцию) или распечатать ответ в STDOUT. Вы можете выбрать вывод мод 10 9 +7 (от 0 до 10 9 +6), если это более удобно.
Тестовые случаи (и объяснение):
[1 1 2 2 2] [1 2 2 3 3] => 24
Первые 2 записи должны быть 1 и 2. Последние 3 записи - это 2, 3 и 3. Есть 2 способа расположить 2 между первыми 2 записями и последними 2 записями. Среди первых 2 записей есть 2 способа их переставить. Среди последних 2 записей есть 6 способов их перегруппировать.
[1 2 3 4 5] [6 7 8 9 10] => 1
Существует только 1 способ, который представляет собой расположение в массивах.
[1 1 ... 1 1] [1 1 ... 1 1] (10000 numbers) => 10000! or 531950728
Каждая возможная перестановка второго массива действительна.
Тест Денниса: Pastebin => 583159312 (мод 1000000007)
Подсчет очков:
Это код-гольф, поэтому выигрывает самый короткий ответ.
В случае ничьей, связи будут разорваны к моменту подачи, что благоприятствует более раннему представлению.
Принять к сведению:
Контейнеры могут быть несортированными.
Целые числа в контейнерах могут быть нулевыми или отрицательными.
Программа должна работать достаточно быстро (максимум час) для массивов небольшого размера (около 10000 в длину).
Вдохновленный этим вопросом о математике стек обмена.
[. . .]
ответ плз