Bonjour. Êtes-vous en compétition les gars? Jusqu'à récemment, je faisais des «escroqueries professionnelles compétitives» (rires).
Bien que je sois intéressé par la programmation compétitive, cela fait deux ans que j'ai trouvé une excuse telle que «l'obstacle pour participer au concours est élevé» et je m'enfuis depuis deux ans. C'est parce que j'ai commencé à être pressé.
Maintenant, il est dans l'état suivant.
Cette fois, j'ai commencé la programmation de concours à partir de zéro
―― Quel genre de processus avez-vous traversé? ――Méthode d'apprentissage recommandée pour ceux qui entreront désormais dans la programmation compétitive
Je voudrais expliquer principalement sur.
TL;DR --Recommandé pour résoudre le problème facile de LeetCode
C'est un concours pour résoudre des problèmes avec un algorithme écrit par vous-même.
Par exemple, les questions suivantes seront posées.
Il y a des jeux qui gagnent si vous dites 0.
Jouer à un jeu à deux joueurs, un nombre n à 1~Nous réduirons le nombre à 3.
Je suis toujours en avance.
De plus, vous et votre partenaire ferez toujours de leur mieux.
Par exemple n=Dans le cas de 4, le résultat est le suivant.
Soi: 3 (réduit de 1)
Adversaire: 2,1,0 (diminuer de 3 et déclarer 0 pour gagner)
Écrivez un programme qui détermine si vous pouvez gagner contre n avec un booléen.
La programmation compétitive est également bonne car elle présente de nombreux problèmes que vous pouvez résoudre avec intérêt.
Personnellement, je pense que les principales différences entre AtCoder et LeetCode sont les suivantes:
AtCoder La structure des données, l'algorithme, les mathématiques, la capacité de réflexion, les connaissances, etc. sont nécessaires de manière équilibrée.
LeetCode De nombreux problèmes spécifiques aux structures de données et aux algorithmes
AtCoder est plus difficile à ressentir sur la peau. LeetCode étant spécialisé dans les structures de données et les algorithmes, je pense que si vous résolvez un certain nombre de problèmes, en particulier les problèmes Easy, vous pourrez également résoudre d'autres problèmes.
Par conséquent, si vous commencez avec le ** problème facile de LetCode, vous pouvez réaliser le plaisir de la programmation compétitive en un temps relativement court. ** **
C ++ est populaire, mais j'écris en Python3. La raison en est que ** j'utilise Python pour les affaires et je l'aime en tant que langage **.
Python3 est inférieur au C ++ en vitesse, mais il a aussi l'avantage de pouvoir ** réduire la quantité de description **.
Vous pourrez peut-être résoudre le problème dans une certaine mesure et passer à une autre langue lorsque vous décidez de maîtriser la programmation compétitive.
Voici une brève description de ce qui s'est passé au cours des huit semaines.
――Il faut beaucoup de temps pour résoudre chaque question
――Vous pouvez résoudre des problèmes résolubles, mais vous ne pouvez pas résoudre des problèmes insolubles, peu importe ce que vous pensez
Dans mon cas, j'estime que ** toutes les 50 questions représentaient une petite avancée **. Cela a conduit à ** "résoudre le nombre de problèmes" décrits plus loin **, et j'en ai été convaincu.
Maintenant, je résous le problème avec la solution suivante.
Je pense que les étapes 1, 2, 3, 4 ci-dessus sont importantes. ** En d'autres termes, le jeu est avant la mise en œuvre. ** **
――Si vous négligez l'étape 1, un problème simple se transformera en un problème insoluble (rires). ――Si vous négligez l'étape 2, vous continuerez à refactoriser l'implémentation détaillée avec une politique que vous ne pourrez jamais résoudre, et à la fin vous ne pourrez pas la résoudre fréquemment. --Si vous négligez l'étape 3, le nombre de WA (mauvaise réponse) augmentera. --Si l'étape 4 est négligée, le nombre de LTE (Limit Time Exceeded) augmentera.
Je pense que les lignes directrices suivantes sont importantes.
Cette idée ne se limite pas, après tout, à une programmation concurrentielle. Je pense que cela peut s'appliquer à n'importe quel domaine.
Sur la base de ce qui précède, le type d'action à entreprendre est décrit ci-dessous.
Pour bien comprendre la structure des données et les algorithmes, il est important de revoir exactement le même problème, mais je pense qu'il est important de ** résoudre un grand nombre de problèmes qui sont posés sous différents angles **.
Si vous ne pouvez pas résoudre le problème, vous verrez la réponse. Ou vous pourriez penser à le résoudre vous-même sans regarder la réponse. L'important ici est de ** reconnaître la différence entre votre propre façon de penser et la façon de penser de la réponse **.
Si vous pouvez résoudre le problème, ** lisez les différentes réponses. ** **
Je pense que c'était très efficace de continuer cela depuis le début.
** Le premier est "un problème trop difficile pour votre niveau actuel". ** Alors, quel est ce dernier problème?
Vous souvenez-vous des problèmes suivants présentés dans «Qu'est-ce qu'une programmation concurrentielle?»
Il y a des jeux qui gagnent si vous dites 0.
Jouer à un jeu à deux joueurs, un nombre n à 1~Nous réduirons le nombre à 3.
Je suis toujours en avance.
De plus, vous et votre partenaire ferez toujours de leur mieux.
Par exemple n=Dans le cas de 4, le résultat est le suivant.
Soi: 3 (réduit de 1)
Adversaire: 2,1,0 (diminuer de 3 et déclarer 0 pour gagner)
Écrivez un programme qui détermine si vous pouvez gagner contre n avec un booléen.
Si vous résolvez ce problème d'une certaine manière, vous pouvez le résoudre en un instant. Inversement, si vous essayez de le résoudre avec un algorithme, cela peut entraîner LTE (Limit Time Exceeded) (comme ce fut le cas avec LeetCode).
Si ** seul le premier peut être résolu, le problème ne peut pas être résolu (bien que l'idée soit correcte) et il y a un risque de malentendu sur le fait qu'il n'est pas correct. ** ** ** C'est très dangereux. ** **
D'un point de vue pédagogique (bien que cela puisse être un bon médicament), ces problèmes ne semblent pas très efficaces. Il n'est pas bon de passer trop de temps sans résoudre.
Si vous pouvez résoudre le problème dans une certaine mesure dès le stade initial, vous verrez le type de problème pour lequel vous n'êtes pas doué. Cette fois, comment nous pouvons résoudre le problème mènera à la prochaine percée.
Au contraire, tout problème ne peut être résolu qu'en continuant à réfléchir à la manière de le résoudre.
** Comment résoudre Étape 2 Plus vous pouvez «considérer chaque méthode», plus vous avez de chances de résoudre le problème, donc réduire vos propres habitudes et faiblesses améliorera directement le taux de précision du problème. ** **
Les notes ne sont que des résultats. C'est peut-être un argument extrême que les professionnels suffisent à rechercher des résultats, mais ** Pour les débutants, "un endroit pour vérifier les résultats de la pratique" est la chose la plus importante. ** **
Je pense personnellement que si vous continuez à "pratiquer pour pratiquer", votre motivation diminuera et cela ne donnera pas de résultats.
Par conséquent, le plus important est ** «d'augmenter les chances de production», c'est-à-dire «de participer au concours sans se soucier des résultats» en programmation compétitive **.
J'ai recommandé LeetCode cette fois, mais si vous pouvez résoudre ** AtCoder, vous devriez résoudre le problème avec AtCoder. ** ** Par-dessus tout, il est important de se rendre compte que «jouer à des programmes compétitifs est amusant».
Si vous lisez cet article et que plus de gens commencent seuls la programmation compétitive, vous ne seriez pas si heureux. Rendez-vous au concours!