Antecedentes
La desigualdad de reordenamiento es una desigualdad que se basa en reorganizar números. Si tengo dos listas de números de la misma longitud, x 0 , x 1 , x 2 ... x n-1 e y 0 , y 1 , y 2 ... y n-1 de la misma longitud, donde yo se me permite reorganizar los números en la lista, una forma de maximizar la suma x 0 y 0 + x 1 y 1 + x 2 y 2 + ... + x n-1 y n-1 es ordenar las 2 listas en orden no decreciente.
Lea el artículo de Wikipedia aquí.
Tarea
Escribiría un programa que tome datos de STDIN o una función que acepte 2 matrices (o contenedores relacionados) de números (que son de la misma longitud).
Suponiendo que escribe una función que acepta 2 matrices (ayb), encontrará la cantidad de formas en que puede reorganizar los números en la segunda matriz (b) para maximizar:
a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+...+a[n-1]*b[n-1]
En este caso, si la matriz b es [1 0 , 2 1 , 2 2 , 3 3 , 3 4 ] (índices de claridad),
[1 0 , 2 1 , 2 2 , 3 3 , 3 4 ],
[1 0 , 2 1 , 2 2 , 3 4 , 3 3 ], (intercambie los dos 3)
[1 0 , 2 2 , 2 1 , 3 3 , 3 4 ] (intercambie los dos 2)
[1 0 , 2 2 , 2 1 , 3 4 , 3 3 ] (intercambia los dos 3 y cambia los dos 2)
se consideran diferentes arreglos. La matriz original, en sí misma, también cuenta como una posible reorganización si también maximiza la suma.
Para la entrada STDIN, puede suponer que la longitud de las matrices se proporciona antes de las matrices (indique para que la use), o que las matrices se proporcionan en diferentes líneas (también indique).
Aquí están las 4 entradas posibles (por conveniencia):
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 la salida, puede devolver la respuesta (si escribe una función) o imprimir la respuesta en STDOUT. Puede optar por enviar la respuesta mod 10 9 +7 (de 0 a 10 9 +6) si es más conveniente.
Casos de prueba (y explicación):
[1 1 2 2 2] [1 2 2 3 3] => 24
Las primeras 2 entradas deben ser 1 y 2. Las últimas 3 entradas son 2, 3 y 3. Hay 2 formas de organizar los 2 entre las primeras 2 entradas y las últimas 2 entradas. Entre las primeras 2 entradas, hay 2 formas de reorganizarlas. Entre las últimas 2 entradas, hay 6 formas de reorganizarlas.
[1 2 3 4 5] [6 7 8 9 10] => 1
Solo hay 1 forma, que es la disposición dada en las matrices.
[1 1 ... 1 1] [1 1 ... 1 1] (10000 numbers) => 10000! or 531950728
Toda permutación posible de la segunda matriz es válida.
Dennis 'Testcase: Pastebin => 583159312 (mod 1000000007)
Puntuación:
Este es el código de golf, por lo que gana la respuesta más corta.
En caso de empate, los empates se romperán en el momento de la presentación, favoreciendo la presentación anterior.
Tomar nota:
Los contenedores pueden estar sin clasificar.
Los enteros en los contenedores pueden ser cero o negativos.
El programa tiene que ejecutarse lo suficientemente rápido (como máximo una hora) para matrices de tamaño modesto (alrededor de 10000 de longitud).
Inspirado por esta pregunta en Mathematics Stack Exchange.
[. . .]