Contexte
L' inégalité de réarrangement est une inégalité basée sur la réorganisation des nombres. Si j'ai deux listes de nombres de même longueur, x 0 , x 1 , x 2 ... x n-1 et y 0 , y 1 , y 2 ... y n-1 de même longueur, où je suis autorisé à réorganiser les nombres dans la liste, un moyen de maximiser la somme x 0 y 0 + x 1 y 1 + x 2 y 2 + ... + x n-1 y n-1 est de trier les 2 listes dans ordre non décroissant.
Lisez l' article Wikipedia ici.
Tâche
Vous écririez un programme qui prend l'entrée de STDIN ou une fonction qui accepte 2 tableaux (ou conteneurs associés) de nombres (qui sont de la même longueur).
En supposant que vous écrivez une fonction qui accepte 2 tableaux (a et b), vous allez trouver le nombre de façons de réorganiser les nombres dans le deuxième tableau (b) pour maximiser:
a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+...+a[n-1]*b[n-1]
Dans ce cas, si le tableau b est [1 0 , 2 1 , 2 2 , 3 3 , 3 4 ] (indices de clarté),
[1 0 , 2 1 , 2 2 , 3 3 , 3 4 ],
[1 0 , 2 1 , 2 2 , 3 4 , 3 3 ], (échangez les deux 3)
[1 0 , 2 2 , 2 1 , 3 3 , 3 4 ] (permutez les deux 2)
[1 0 , 2 2 , 2 1 , 3 4 , 3 3 ] (échangez les deux 3 et échangez les deux 2)
sont considérés comme des arrangements différents. Le tableau d'origine, lui-même, compte également comme un éventuel réarrangement s'il maximise également la somme.
Pour l'entrée STDIN, vous pouvez supposer que la longueur des tableaux est fournie avant les tableaux (veuillez l'indiquer pour que vous l'utilisiez), ou que les tableaux soient fournis sur des lignes différentes (veuillez également l'indiquer).
Voici les 4 entrées possibles (pour plus de commodité):
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)
Pour la sortie, vous êtes autorisé à renvoyer la réponse (si vous écrivez une fonction) ou à imprimer la réponse dans STDOUT. Vous pouvez choisir de sortir la réponse mod 10 9 +7 (de 0 à 10 9 +6) si cela est plus pratique.
Cas de test (et explication):
[1 1 2 2 2] [1 2 2 3 3] => 24
Les 2 premières entrées doivent être 1 et 2. Les 3 dernières entrées sont 2, 3 et 3. Il y a 2 façons d'organiser les 2 entre les 2 premières entrées et les 2 dernières entrées. Parmi les 2 premières entrées, il y a 2 façons de les réorganiser. Parmi les 2 dernières entrées, il y a 6 façons de les réorganiser.
[1 2 3 4 5] [6 7 8 9 10] => 1
Il n'y a qu'une seule façon, qui est l'arrangement donné dans les tableaux.
[1 1 ... 1 1] [1 1 ... 1 1] (10000 numbers) => 10000! or 531950728
Chaque permutation possible du deuxième tableau est valide.
Testcase de Dennis: Pastebin => 583159312 (mod 1000000007)
Notation:
C'est le code-golf, donc la réponse la plus courte l'emporte.
En cas d'égalité, les égalités seront rompues au moment de la soumission, favorisant la soumission antérieure.
Prendre note:
Les conteneurs peuvent ne pas être triés.
Les entiers dans les conteneurs peuvent être nuls ou négatifs.
Le programme doit s'exécuter assez rapidement (au plus une heure) pour les baies de taille modeste (environ 10000 de longueur).
Inspiré par cette question sur Mathematics Stack Exchange.
[. . .]
plz