Pour clore la session d’automne, nous avons présenté les solutions des problèmes de l’ICPC 2021 étudiés la semaine précédente. Vous pouvez trouver ci-dessous des éléments de solution pour chacun de ces problèmes. Rendez-vous en janvier pour la reprise de nos rencontres!
Une chaîne
Une stratégie, pas assez efficace, consiste à énumérer toutes les
Dans “Tic Tac Toe Counting”, une configuration de tic tac toe est donnée en entrée. L’objectif est de calculer, à partir de cette configuration, le nombre de séquences de coups qui font gagner les X et le nombre de celles qui font gagner les O. Le programme doit aussi signaler si la configuration donnée ne peut pas possiblement être atteinte à partir d’un tableau vide où les X jouent en premier. Voici trois exemples de configurations initiales invalides:
OXX XXX OOO XOX ... XXX OXO ... ...
Ce problème peut être résolu en énumérant exhaustivement toutes les séquences de coups possibles. Lorsqu’une configuration gagnante est atteinte, on incrémente le nombre de séquences de coups qui font gagner l’un ou l’autre des joueurs. Notez qu’il est possible d’atteindre plusieurs fois la même configuration avec plusieurs séquences de coups distinctes. Dans ce cas, il faut éviter de répéter le calcul, en mémorisant les réponses en fonction des configurations.
Pour vérifier que la configuration donnée en entrée est valide, il faut évaluer la différence entre le nombre de X et de O. Cette valeur indique lequel des deux joueurs vient de placer une marque. Si elle est nulle, alors les O viennent de jouer, donc si les X sont gagnants alors la configuration est invalide puisque les O n’auraient pas pu jouer après une victoire de leur adversaire. De même, si la différence vaut 1, alors les X viennent de jouer, donc les O ne peuvent pas être gagnants. Toute autre différence correspond aussi à une configuration invalide.
Un entier est dit concave si les chiffres de sa représentation décimale vont croissant puis décroissant de gauche à droite. Dans “Rise and Fall”, l’objectif est de trouver le plus grand entier concave inférieur ou égal au nombre donné en entrée.
Par définition, la représentation décimale
Cette observation suggère une approche vorace: traverser de gauche à droite la représentation décimale de l’entrée,
Considérons la règle suivante permettant de générer des chaînes de caractères sur l’alphabet
Cette règle permet de générer la chaîne JJTO (par exemple comme une sous-chaîne de TOIZSLJJTOLSZI) mais pas la chaîne JJTT. Dans “Tetris Generation”, l’objectif est de déterminer si des chaînes données en entrée ont pu être générées par cette règle.
Pour déterminer si une chaîne
Dans “Fail Them All!”, ayant les réponses d’un ensemble de
Il existe
Autrement dit, si un étudiant a répondu vrai à deux questions
L’utilisation d’un algorithme pour le problème de 2-satisfaisabilité permet de vérifier l’existence d’une correction valide et d’en exhiber une. Si plusieurs corrections valides existent, le problème demande de trouver la première dans l’ordre lexicographique. L’utilisation de la technique de retour sur trace limité permet de contrôler l’ordre dans lequel les solutions sont énumérées et donc de répondre à cette contrainte.