Énoncé

On considère n récipients identiques, remplis de liquide à différents niveaux. On souhaite répartir le liquide de manière équilibrée dans les récipients en faisant un minimum de transvasements. Supposons par exemple qu'il y ait 3 récipients initialement remplis à 3L, 7L et 2L. Si on transvase 1L du deuxième vers le premier, on passe à l'état 4L / 6L / 2L. On transvase alors 2L du deuxième vers le troisième et on arrive à l'état 4L / 4L / 4L. Il nous a fallu deux transvasements.

Entrée

L'entrée du programme sera la liste des volumes contenus initialement dans les récipients, séparés par des espaces, le tout suivi d'un retour à la ligne. Pour simplifier et éviter les problèmes d'arrondis, les volumes seront toujours des entiers, et leur moyenne sera aussi toujours entière (donc l'équilibre que l'on souhaite atteindre sera pour une valeur entière d'unités de volume dans chaque récipient).

Sortie

La sortie de votre programme devra être le nombre minimum de transvasements requis (chaque transvasement se faisant depuis exactement 1 récipient vers exactement 1 récipient) pour arriver dans l'état où tous les récipients contiennent la même quantité de liquide. Ce nombre devra être suivi d'un retour à la ligne.

Exemples

EntréeSortie

Squelette CamlLight

Squelette OCaml