Flip of Time
Un sablier est donné sous la forme d'un tableau tuple (upper, lower) pour le nombre de minutes de sable qui sont actuellement stockées dans ses chambres supérieure et inférieure, les deux chambres étant suffisamment grandes pour contenir tout le sable de ce sablier. Ainsi, après que m minutes se soient écoulées, l'état de ce sablier particulier sera upper - min(upper, m), lower + min(upper, m). La quantité totale de sable à l'intérieur du sablier ne change jamais, et aucune des chambres ne contient d'anti-sable négatif.
Étant donné une liste de glasses, votre tâche consiste à trouver une séquence optimale de mouvements pour mesurer exactement t minutes, notées comme le nombre de retournements individuels du sablier effectués en cours de route. Chaque mouvement se compose de deux étapes:
- vous devez d'abord attendre que le sablier qui contient actuellement la plus petite quantité non nulle m de sable dans sa chambre supérieure s'épuise.
- lorsque cela se produit, choisissez un sous-ensemble quelconque de glasses et retournez instantanément ce sous-ensemble choisi.
Regardez l'exemple de [(7, 0), (11, 0)], 15 cas. Vous trouverez une explication pour les cas légèrement modifiés sur le site Popular Mechanics article.
Vous n'avez pas le choix d'attendre dans la première étape, mais dans la deuxième étape, vous bénéficiez d'un embarras de...