fundo
A desigualdade de rearranjo é uma desigualdade baseada em números de reorganização. Se eu tiver duas listas de números do mesmo comprimento, x 0 , x 1 , x 2 ... x n-1 e y 0 , y 1 , y 2 ... y n-1 do mesmo comprimento, onde eu É permitido reorganizar os números na lista, uma maneira de maximizar a soma x 0 y 0 + x 1 y 1 + x 2 y 2 + ... + x n-1 y n-1 é classificar as 2 listas em ordem não decrescente.
Leia o artigo da Wikipedia aqui.
Tarefa
Você escreveria um programa que recebe a entrada do STDIN ou uma função que aceita 2 matrizes (ou contêineres relacionados) de números (que têm o mesmo comprimento).
Supondo que você escreva uma função que aceite 2 matrizes (aeb), você encontrará o número de maneiras pelas quais pode reorganizar os números na segunda matriz (b) para maximizar:
a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+...+a[n-1]*b[n-1]
Nesse caso, se a matriz b for [1 0 , 2 1 , 2 2 , 3 3 , 3 4 ] (índices de clareza),
[1 0 , 2 1 , 2 2 , 3 3 , 3 4 ],
[1 0 , 2 1 , 2 2 , 3 4 , 3 3 ], (troque os dois 3)
[1 0 , 2 2 , 2 1 , 3 3 , 3 4 ] (troque os dois 2)
[1 0 , 2 2 , 2 1 , 3 4 , 3 3 ] (troque os dois 3 e troque os dois 2)
são considerados arranjos diferentes. A matriz original, por si só, também conta como um possível rearranjo se também maximizar a soma.
Para entrada STDIN, você pode assumir que o comprimento das matrizes é fornecido antes das matrizes (indique para usá-las) ou que as matrizes sejam fornecidas em linhas diferentes (também indique).
Aqui estão as 4 entradas possíveis (por conveniência):
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)
Para saída, você pode retornar a resposta (se você escrever uma função) ou imprimir a resposta em STDOUT. Você pode escolher a saída mod 10 9 +7 (de 0 a 10 9 +6), se for mais conveniente.
Casos de teste (e explicação):
[1 1 2 2 2] [1 2 2 3 3] => 24
As 2 primeiras entradas devem ser 1 e 2. As 3 últimas entradas são 2, 3 e 3. Existem 2 maneiras de organizar os 2 entre as 2 primeiras entradas e as 2 últimas entradas. Entre as 2 primeiras entradas, existem 2 maneiras de reorganizá-las. Entre as duas últimas entradas, existem 6 maneiras de reorganizá-las.
[1 2 3 4 5] [6 7 8 9 10] => 1
Existe apenas uma maneira, que é o arranjo fornecido nas matrizes.
[1 1 ... 1 1] [1 1 ... 1 1] (10000 numbers) => 10000! or 531950728
Toda permutação possível da segunda matriz é válida.
Caso de teste de Dennis: Pastebin => 583159312 (mod 1000000007)
Pontuação:
Este é o código-golfe, por isso a resposta mais curta vence.
Em caso de empate, os empates serão interrompidos no momento da submissão, favorecendo a submissão anterior.
Tome nota:
Os recipientes podem não ser separados.
Os números inteiros nos contêineres podem ser zero ou negativos.
O programa precisa ser executado com rapidez suficiente (no máximo uma hora) para matrizes de tamanho modesto (com cerca de 10000 de comprimento).
Inspirado por esta pergunta no Mathematics Stack Exchange.
[. . .]
responder plz