Techniques et problèmes pour compétitions de programmation

Gestion des entrées multiples Pour les problèmes avec plusieurs jeux de données, initialisez les variables à l'intérieur de la boucle de test pour éviter toute réutilisation indésirable des résultats précédents. Lors de l'affichage, utilisez des fonctions appropriées pour vider le tampon de sortie. Évitez les initialisations répétées de tableau ...

Publié le 16 juillet à 12h06

Solutions algorithmiques en Java pour les problèmes d'îles sur grille

Problème 1 : Superficie maximale d'une île Énoncé : Étant donné une grille composée de 1 (terre) et 0 (eau), calculer la superficie maximale des îles. La superficie est le nombre total de cellules terrestres connectées horizontalement ou verticalement. Exemple d'entrée : 4 5 1 1 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 1 Sortei attendue : 4 Approche ...

Publié le 11 juillet à 18h31

Rapport de résolution pour le problème P4427 [BJOI2018] Somme des profondeurs

Rapport de résolution pour le problème P4427 [BJOI2018] Somme des profondeurs 1. Énoncé du problème La tâche principale de ce problème est la suivante : étant donné un arbre ayant le nœud 1 comme racine, il faut répondre à plusieurs requêtes. Chaque requête fournit deux nœuds u, v et un entier k, et nous devons calculer la somme des k-ièmes pui ...

Publié le 8 juillet à 02h45

Ancêtre commun le plus proche (LCA) dans un arbre

L'ancêtre commun le plus proche (LCA) de deux nœuds u et v dans un arbre enraciné est le nœud le plus profond qui est un ancêtre à la fois de u et de v. Par exemple, dans l'arbre ci-dessous, LCA(3,7) = 1 et LCA(3,4) = 2. Il existe plusieurs méthodes pour calculer le LCA, classifiées en algorithmes hors ligne (toutes les requêtes sont connues à ...

Publié le 29 juin à 20h34

Optimisation d'une solution DFS pour le problème de la tour de robots

L'énoncé provient de la compétition Blue Bridge Cup, problème numéro 118, intitulé "Tour de Robots". Le problème consiste à construire une structure pyramidale avec des robots de deux types ('a' et 'b') en respectant certaines règles de placement. L'approche utilisée est le parcours en profondeur (DFS) pour explorer toutes les configu ...

Publié le 29 juin à 18h49

Algorithmes de recherche pour les arbres binaires et les grilles

Problème 1 : Emplacement optimal de l'hôpital Description du problème Considérons un arbre binaire, comme illustré ci-dessous : Les valeurs dans les nœuds représentent la population des résidents, et les numéros à côté sont les identifiants des nœuds. L'objectif est de construire un hôpital sur un nœud de sorte que la somme des distances parcou ...

Publié le 26 juin à 02h55

Exploration des composantes connexes d'un graphe par parcours DFS et BFS

Cet article présente une approche pour identifier et lister toutes les composantes connexes d'un graphe non orienté en utilisant deux algorithmes de parcours fondamentaux : le parcours en profondeur (DFS) et le parcours en largeur (BFS). Description du Problème Étant donné un graphe non orienté composé de N sommets et E arêtes, le but est d'énu ...

Publié le 23 juin à 00h49

Tri Topologique par BFS et DFS avec Détection de Cycles

Introduction au tri topologique : Deux approches principales existent : l'algorithme de Kahn (basé sur BFS) et la méthode DFS. Leur objectif est d'ordonner les nœuds dans un graphe dirigé acyclique (DAG), offrant souvent plusieurs solutions valides. Ces algorithmes identifient également la présence de cycles. Principe de l'algorithme de Kahn (B ...

Publié le 20 juin à 19h52

Problèmes avancés de recherche en profondeur avec exemples de code

Problème classique de recherche combinatoire avec test de primalité. #include <iostream> using namespace std; int countPrimes(int val) { if (val < 2) return 0; for (int d = 2; d * d <= val; ++d) { if (val % d == 0) return 0; } return 1; } int totalComb = 0; void generateCombinations(int step, int lastIndex, int ...

Publié le 18 juin à 06h22

Tutoriel Approfondi sur les Concepts Avancés du C++

11.1 Recherche en profondeur (DFS) 11.1.1 Concepts de base Le DFS (Depth-First Search) est un algorithme récursif qui explore un chemin jusqu'au bout puis fait marche arrière. Gabarit de base void dfs(int etat) { // 1. Condition d'arrêt if (condition satisfaite) { traiter le résultat; return; } // 2. Élagage ...

Publié le 10 juin à 06h55