tło
Przegrupowanie Nierówność jest nierówność, która opiera się na przestawienie cyfr. Jeśli mam dwie listy liczb o tej samej długości, x 0 , x 1 , x 2 ... x n-1 i y 0 , y 1 , y 2 ... y n-1 o tej samej długości, gdzie I mogę zmienić kolejność liczb na liście, sposobem na maksymalizację sumy x 0 y 0 + x 1 y 1 + x 2 y 2 + ... + x n-1 y n-1 jest posortowanie 2 list w nie malejące zamówienie.
Przeczytaj artykuł w Wikipedii tutaj.
Zadanie
Napisałbyś program, który pobiera dane wejściowe ze STDIN lub funkcję, która akceptuje 2 tablice (lub powiązane kontenery) liczb (o tej samej długości).
Zakładając, że napiszesz funkcję, która akceptuje 2 tablice (a i b), znajdziesz liczbę sposobów na zmianę kolejności liczb w drugiej tablicy (b), aby zmaksymalizować:
a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+...+a[n-1]*b[n-1]
W takim przypadku, jeśli tablica b wynosi [1 0 , 2 1 , 2 2 , 3 3 , 3 4 ] (wskaźniki dla przejrzystości),
[1 0 , 2 1 , 2 2 , 3 3 , 3 4 ],
[1 0 , 2 1 , 2 2 , 3 4 , 3 3 ], (zamień dwie 3)
[1 0 , 2 2 , 2 1 , 3 3 , 3 4 ] (zamień dwie 2)
[1 0 , 2 2 , 2 1 , 3 4 , 3 3 ] (zamień dwie 3 i zamień dwie 2)
są uważane za różne ustalenia. Oryginalna tablica sama w sobie również liczy się jako możliwa rearanżacja, jeśli również maksymalizuje sumę.
W przypadku danych wejściowych STDIN można założyć, że długość tablic jest podana przed tablicami (proszę podać, aby z nich korzystać), lub że tablice są podane w różnych wierszach (proszę również podać).
Oto 4 możliwe dane wejściowe (dla wygody):
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)
W przypadku danych wyjściowych możesz zwrócić odpowiedź (jeśli napiszesz funkcję) lub wydrukować odpowiedź do STDOUT. Możesz wybrać wyjście mod 10 9 +7 (od 0 do 10 9 +6), jeśli jest to wygodniejsze.
Przypadki testowe (i wyjaśnienia):
[1 1 2 2 2] [1 2 2 3 3] => 24
Pierwsze 2 wpisy muszą mieć wartość 1 i 2. Ostatnie 3 wpisy to 2, 3 i 3. Istnieją 2 sposoby rozmieszczenia tych 2 między pierwszymi 2 wpisami a ostatnimi 2 wpisami. Wśród pierwszych 2 wpisów są 2 sposoby ich zmiany. Wśród 2 ostatnich wpisów istnieje 6 sposobów na ich zmianę.
[1 2 3 4 5] [6 7 8 9 10] => 1
Jest tylko jeden sposób, czyli ustawienie podane w tablicach.
[1 1 ... 1 1] [1 1 ... 1 1] (10000 numbers) => 10000! or 531950728
Każda możliwa permutacja drugiej tablicy jest poprawna.
Test Dennisa: Pastebin => 583159312 (mod 1000000007)
Punktacja:
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź.
W przypadku remisu remisy zostaną zerwane przez czas złożenia, co sprzyja wcześniejszemu zgłoszeniu.
Uwaga:
Pojemniki mogą być nieposortowane.
Liczby całkowite w pojemnikach mogą być zerowe lub ujemne.
Program musi działać wystarczająco szybko (najwyżej godzinę) dla tablic o skromnych rozmiarach (około 10000 długości).
Inspirowane tym pytaniem na temat wymiany stosów matematycznych.
[. . .]
odpowiedź plz