Edit: Voir la solution au bas de cette question forte> (C ++) p> J'ai un concours de programmation à venir dans un peu, et j'ai Préparez :) p> Je pratique à l'aide de ces questions: p> http://cemc.math.uwaterloo.ca/ContestS/computing/2009/stage2/day1.pdf P> Je cherche Au problème B ("dîner"). P> aucune idée où commencer? Je ne peux pas vraiment penser à rien d'autre que l'approche naïve (c.-à-d. Essayer toutes les permutations) qui prendraient trop de temps pour être une réponse valide. P> BTW, la langue indique C ++ et Pascal je pense, mais Je me fiche de quelle langue que vous utilisez - je veux dire vraiment tout ce que je veux, c'est un indice quant à la direction que je devrais procéder et perhpas une courte explication pour aller avec elle. On me semble manquant quelque chose d'évident ... p> Bien sûr, la spéculation prolongée est plus que la bienvenue, mais je voulais juste préciser que je ne cherche pas une solution complète ici :) P > Vous avez une chaîne binaire N de longueur 1-100 (dans la question qu'elles utilisent H's et G à la place de ses et de 0). Vous devez supprimer tous les chiffres de celui-ci, dans le moins le moins de étapes possibles forts>. À chaque étape, vous pouvez supprimer n'importe quel nombre de chiffres adjacents tant qu'ils sont les mêmes. C'est-à-dire que, à chaque étape, vous pouvez supprimer n'importe quel nombre de G adjacents, ou un nombre quelconque de H adjacent, mais vous ne pouvez pas supprimer H'S et G en une étape. P> Exemple: P>
Version courte de la question: h2>
95 2
GGHHGGHHGGHHGGHHGGHHGGHHGGHHGGHHGGHHGGHHGGHHGGHHGGHHGGHHGGHHGGHHGHGHGHGHGHGHGHGHGHGHGHGHGHGHGHG
3 Réponses :
Ce problème devient un peu plus simple si vous traitez respectivement 1 h ou consécutif G d'environ 1 h ou 1 g (elles sont traitées de la même manière, dans cette GHHHHHG et GES nécessiteraient le même nombre de déménagements). P>
Cela réduit le problème à un ensemble de H et alternance d'alternance. À ce stade, en supprimant tout le nombre inférieur des 2 vous donnerait la quantité d'opérations nécessaires (plus 1 pour les "autres" lettres restantes). P>
algorithme peut être fait dans O (n): p>
Après itération à travers l'ensemble, la réponse doit être le moindre des 2 comptoirs (nombre de déménagements nécessaires pour supprimer le plus petit nombre de caractères), plus 1 (pour les "autres" caractères, qui resteront). < / p>
Y a-t-il un moyen plus rapide? (et cela fonctionne-t-il réellement?) p>
Cela ne fonctionnera probablement pas. Ils disent que le nombre maximum de SH et de GS est 100 - donc je m'attends à quelque chose de moins efficace que O (N) à coup sûr. Je peux voir ce que vous essayez de faire ici. Mais il y a des cas plus compliqués où cela ne fonctionnerait pas. Merci quand même!
En fait, bien que votre idée de les traiter comme des «ensembles» est assez intelligente.
+1 - Voir ma question mise à jour pour la solution finale. Votre idée de regroupement (le regrouper dans des ensembles) était très utile!
Ces étapes: p>
Répétez les étapes ci-dessus. Chaque étape va coalera un groupe plus large de H + ou G +. P>
Finalement, vous aurez une H + et un g + (en supposant que vous aviez les deux H et G pour commencer). Supprimer ceux-ci. P>
(h +, g + signifie x ou plus h ou g, où x est le nombre minimum pouvant être supprimé à la fois.) p>
Sauf si je me trompe: c'est simplement un moyen de se débarrasser de tous les H et G. Cependant, ce dont j'ai besoin est une méthode pour les supprimer dans le moins de pas de mesures possibles i>, puis sur le nombre de mesures qu'il faudrait.
Mis à jour pour supprimer le g + qui donne la plus longue goaled H +. Je pense que cela le fera pour vous.
Hmm. Semble prometteur - bien que je me demande s'il y a des cas où cela ne fonctionnera pas. Je vais essayer et posterai.
Je pense qu'ils peuvent essayer de vous tromper dans la sortie de certains H + ou G + qui sont trop courts pour être supprimés, il est donc important de veiller à ce que l'algorithme se concentre sur ne pas quitter H + ou G + Stragglers. J'ai mis à jour la première étape pour le refléter.
Merci. Au fait, comment allez-vous classer ce problème? Bien que cela soit cool d'avoir celui-ci résolu, j'aimerais particulièrement pouvoir reconnaître d'autres problèmes similaires, ainsi que des recherches supplémentaires sur des problèmes tels que celui-ci.
Brillant!! Cela a fonctionné parfaitement - a du sens totalement! Voir le code dans ma question mise à jour.
Heureux d'aider, votre solution est belle. Bonne chance à la compétition!
@Cam Le nombre d'étapes pour supprimer tous les chiffres est toujours plancher ((nombre de groupes) / 2 + 1) code>.
Eh bien, voici une pensée - une perte de généralité, vous pouvez remplacer les séquences de GS et HS avec le nombre repoussant le nombre de lettres du groupe. P>
Prenons le cas # 2: Supprimer un groupe de lettres et la fusion des deux voisins élimine un nombre et remplacer les deux adjacents avec leur somme:
2 1 2 2 3 2 strong> 1 2 1 2 2 -> 2 1 2 4 em> 1 2 1 2 2 strong> -> 2 1 Si vous remarquez, chaque fois que nous retirons un groupe du milieu (non supérieur ou le plus à droite), la longueur diminue de 2, le nombre d'étapes nécessaires semble être autour de N / 2 (où n est la longueur de La liste des chiffres que nous avons commencés à partir de) - La torsion étant que si N était même numéro un nombre, à la fin, vous aurez une liste de 2 éléments qui seront effacés en 2 étapes (donc +1 étape supplémentaire). p>
Il me semble donc que le nombre optimal d'étapes est toujours = trunc ((n + 1) / 2) - si fort> est possible. Ainsi, le travail semble être plus du genre de découverte s'il est possible de réduire la chaîne H-G - si c'est le cas, nous connaissons le nombre de marches minimums. P>
pensées? P> GGGHHHGGGHHHHHHHGG CODE>
- Il devient 2 1 2 2 3 2 1 2 1 2 2 code> p>
Non, malheureusement, vous ne pouvez rien déplacer en dehors de l'exécution des déménagements comme décrit.
Tri de la liste ferait la réponse toujours 1 ou 2, ce que je ne pense pas était l'effet prévu.
Épaules et aller pour les genoux.
C'est la taille des paires adjacentes qui rendent cela intéressant. S'il était fixé à 2 ou plus, la réponse de @ Paradigm est la meilleure, mais les groupes signifie que vous devrez frapper le bon ordre pour obtenir suffisamment de lettres pour pouvoir les supprimer.