Hallo. Konkurriert ihr? Bis vor kurzem habe ich "Competitive Pro Scams" gemacht (lacht).
Obwohl ich an wettbewerbsfähiger Programmierung interessiert bin, bin ich zwei Jahre lang weggelaufen, seit ich eine Ausrede wie "Die Hürde für die Teilnahme am Wettbewerb ist hoch" gefunden habe, und ich habe das Gefühl der Krise, dass "dies mir nicht für immer das Grundwissen der Informatik vermitteln wird". Es war, weil ich anfing, von gedrückt zu werden.
Jetzt ist es im folgenden Zustand.
Dieses Mal habe ich die Wettbewerbsprogrammierung von Grund auf neu gestartet
――Welchen Prozess haben Sie durchlaufen? ――Empfohlene Lernmethode für diejenigen, die von nun an in wettbewerbsfähige Programme einsteigen
Ich möchte hauptsächlich darüber erklären.
TL;DR
Es ist ein Wettbewerb, um Probleme mit einem von Ihnen selbst geschriebenen Algorithmus zu lösen.
Beispielsweise werden die folgenden Fragen gestellt.
Es gibt Spiele, die gewinnen, wenn Sie 0 sagen.
Ein Spiel mit zwei Spielern spielen, eine Zahl n zu 1~Wir werden die Anzahl auf 3 reduzieren.
Ich bin immer voraus.
Außerdem werden Sie und Ihr Partner immer ihr Bestes geben.
Zum Beispiel n=Im Fall von 4 ist das Ergebnis wie folgt.
Selbst: 3 (um 1 reduziert)
Gegner: 2,1,0 (um 3 verringern und 0 deklarieren, um zu gewinnen)
Schreiben Sie ein Programm, das bestimmt, ob Sie mit boolean gegen n gewinnen können.
Wettbewerbsfähige Programmierung ist auch gut, weil sie viele Probleme hat, die Sie mit Interesse angehen können.
Persönlich denke ich, dass die Hauptunterschiede zwischen AtCoder und LeetCode wie folgt sind:
AtCoder Datenstruktur, Algorithmus, Mathematik, Denkfähigkeit, Wissen usw. sind ausgewogen erforderlich.
LeetCode Viele spezifische Probleme für Datenstrukturen und Algorithmen
AtCoder ist auf der Haut schwieriger zu fühlen. Da LeetCode auf Datenstrukturen und Algorithmen spezialisiert ist, denke ich, dass Sie, wenn Sie eine bestimmte Anzahl von Problemen lösen, insbesondere einfache Probleme, auch andere Probleme lösen können.
Wenn Sie also mit dem ** Easy-Problem von LetCode beginnen, können Sie in relativ kurzer Zeit die Freude an wettbewerbsfähiger Programmierung erleben. ** **.
C ++ ist beliebt, aber ich schreibe in Python3. Der Grund ist, dass ** ich Python für geschäftliche Zwecke verwende und es als Sprache mag **.
Python3 ist in der Geschwindigkeit C ++ unterlegen, hat aber auch den Vorteil, dass es in der Lage ist, die Anzahl der Beschreibungen zu reduzieren.
Möglicherweise können Sie das Problem bis zu einem gewissen Grad lösen und in eine andere Sprache wechseln, wenn Sie sich entscheiden, wettbewerbsfähige Programmierung zu beherrschen.
Hier ist eine kurze Beschreibung dessen, was während der acht Wochen passiert ist.
――Die Beantwortung jeder Frage nimmt viel Zeit in Anspruch
In meinem Fall habe ich das Gefühl, dass ** alle 50 Fragen ein kleiner Durchbruch kam **. Dies führte zu ** "Lösung der Anzahl der Probleme", die später beschrieben werden **, und ich war überzeugt.
Jetzt löse ich das Problem mit der folgenden Lösung.
Ich denke, die obigen Schritte 1, 2, 3, 4 sind wichtig. ** Mit anderen Worten, das Spiel ist vor der Implementierung. ** **.
――Wenn Sie Schritt 1 vernachlässigen, wird aus einem einfachen Problem ein unlösbares Problem (lacht). ――Wenn Sie Schritt 2 vernachlässigen, werden Sie die detaillierte Implementierung weiterhin mit einer Richtlinie umgestalten, die Sie niemals lösen können, und am Ende werden Sie sie nicht häufig lösen können.
Ich denke, die folgenden Richtlinien sind wichtig.
Diese Idee ist schließlich nicht auf wettbewerbsfähige Programmierung beschränkt. Ich denke, es kann auf jedes Gebiet angewendet werden.
Auf der Grundlage der obigen Ausführungen wird nachfolgend beschrieben, welche Maßnahmen ergriffen werden sollten.
Um die Datenstruktur und die Algorithmen vollständig zu verstehen, ist es wichtig, genau dasselbe Problem zu überprüfen, aber ich denke, es ist wichtig, ** eine große Anzahl von Problemen zu lösen, die aus verschiedenen Blickwinkeln gestellt werden **.
Wenn Sie das Problem nicht lösen können, sehen Sie die Antwort. Oder Sie könnten darüber nachdenken, es selbst zu lösen, ohne auf die Antwort zu achten. Das Wichtigste dabei ist, den Unterschied zwischen Ihrer eigenen Denkweise und der Denkweise der Antwort zu erkennen.
Wenn Sie das Problem lösen können, ** lesen Sie die verschiedenen Antworten. ** **.
Ich denke, es war sehr effektiv, dies von Anfang an fortzusetzen.
** Ersteres ist "ein Problem, das für Ihr aktuelles Niveau zu schwierig ist". ** Was ist das letztere Problem?
Erinnern Sie sich an die folgenden Probleme, die in "Was ist wettbewerbsfähige Programmierung?"
Es gibt Spiele, die gewinnen, wenn Sie 0 sagen.
Ein Spiel mit zwei Spielern spielen, eine Zahl n zu 1~Wir werden die Anzahl auf 3 reduzieren.
Ich bin immer voraus.
Außerdem werden Sie und Ihr Partner immer ihr Bestes geben.
Zum Beispiel n=Im Fall von 4 ist das Ergebnis wie folgt.
Selbst: 3 (um 1 reduziert)
Gegner: 2,1,0 (um 3 verringern und 0 deklarieren, um zu gewinnen)
Schreiben Sie ein Programm, das bestimmt, ob Sie mit boolean gegen n gewinnen können.
Wenn Sie dieses Problem auf eine bestimmte Weise lösen, können Sie es sofort lösen. Wenn Sie dagegen versuchen, es mit einem Algorithmus zu lösen, kann dies zu LTE (Limit Time Exceeded) führen (wie dies bei LeetCode der Fall war).
Wenn ** nur das erstere gelöst werden kann, kann das Problem nicht gelöst werden (obwohl die Idee korrekt ist), und es besteht die Gefahr eines Missverständnisses, dass es nicht korrekt ist. ** **. ** Das ist sehr gefährlich. ** **.
Aus pädagogischer Sicht (obwohl es eine gute Medizin sein kann) scheinen solche Probleme nicht sehr effektiv zu sein. Es ist nicht gut, zu viel Zeit zu verbringen, ohne zu lösen.
Wenn Sie das Problem von Anfang an bis zu einem gewissen Grad lösen können, werden Sie feststellen, in welcher Art von Problem Sie nicht gut sind. Dieses Mal wird die Frage, wie wir das Problem lösen können, zum nächsten Durchbruch führen.
Im Gegenteil, jedes Problem kann nur gelöst werden, indem man weiter darüber nachdenkt, wie man es löst.
** So lösen Sie Schritt 2 Je mehr Sie "jede Methode in Betracht ziehen" können, desto wahrscheinlicher ist es, dass Sie das Problem lösen. Wenn Sie also Ihre eigenen Gewohnheiten und Schwächen reduzieren, wird die Genauigkeitsrate des Problems direkt verbessert. ** **.
Noten sind nur Ergebnisse. Es mag ein extremes Argument sein, dass Profis ausreichen, um Ergebnisse zu erzielen, aber ** Für Anfänger ist "ein Ort, an dem die Ergebnisse der Praxis überprüft werden können" das Wichtigste. ** **.
Ich persönlich denke, wenn Sie "Üben für Üben" fortsetzen, wird Ihre Motivation sinken und es wird nicht zu Ergebnissen führen.
Daher ist das Wichtigste ** "die Produktionschancen zu erhöhen", dh "am Wettbewerb teilzunehmen, ohne sich um die Ergebnisse zu sorgen" ** in der Wettbewerbsprogrammierung.
Ich habe diesmal LeetCode empfohlen, aber wenn Sie ** AtCoder lösen können, sollten Sie das Problem mit AtCoder lösen. ** **. Vor allem die Erkenntnis, dass "wettbewerbsfähiges Programmieren Spaß macht" wichtig ist.
Wenn Sie diesen Artikel lesen und mehr Leute alleine mit dem Programmieren beginnen, wären Sie nicht so glücklich. Wir sehen uns im Wettbewerb!