Фон
Перебудова Нерівність є нерівність, яке засноване на перестановкою чисел. Якщо у мене є два списки чисел однакової довжини, x 0 , x 1 , x 2 ... x n-1 і y 0 , y 1 , y 2 ... y n-1 однакової довжини, де я мені дозволяється переставляти числа у списку, спосіб максимізувати суму x 0 y 0 + x 1 y 1 + x 2 y 2 + ... + x n-1 y n-1 - це сортування двох списків у порядок зменшення.
Прочитайте статтю у Вікіпедії тут.
Завдання
Ви б написали програму, яка приймає дані від 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 ] (поміняйте місцями два)
[1 0 , 2 2 , 2 1 , 3 4 , 3 3 ] (поміняйте два 3-х і поміняйте два 2-х)
вважаються різними домовленостями. Сам початковий масив також вважається можливим перестановкою, якщо він також максимально збільшує суму.
Для введення STDIN ви можете припустити, що довжина масивів надається перед масивами (будь ласка, вкажіть, що ви їх використовуєте), або що масиви надаються в різних рядках (також, будь ласка, вкажіть).
Ось чотири можливі входи (для зручності):
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 способи їх перестановки. Серед двох останніх записів є 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
Кожна можлива перестановка другого масиву є дійсною.
Денніс TestCase: Pastebin => 583159312 (мод 1000000007)
Оцінка:
Це код-гольф, тому найкоротша відповідь виграє.
У випадку зрівноваження, зв'язки будуть порушені часом подання, що сприятиме більш ранній подачі.
Брати до відома:
Контейнери можуть бути несортованими.
Цілі числа в контейнерах можуть бути нульовими або від’ємними.
Програма повинна працювати досить швидко (щонайбільше години) для масивів невеликого розміру (довжиною близько 10000).
Натхненний цим питанням на обміні стека математики.
[. . .]
plz