Freut mich, dich kennenzulernen. Ich bin ein Anfänger, der letzte Woche den Wettbewerb Pro gestartet hat. Ich benutze jetzt Python.
Wenn möglich, möchte ich gute Ergebnisse bei Wettkampfprofis erzielen, ohne mich auf C ++ zu verlassen! Also dachte ich darüber nach, wie ich die Punktzahl mit Python erhöhen kann.
Zum Beispiel in C ++
#define rep(i,n) for((i)=0;(i)<(int)(n);(i)++)
Es gibt viele Leute, die so beschleunigen. Kurz gesagt, es fühlt sich an, als würde man häufig verwendete Beschreibungen vereinfachen. Ich wusste von früher, dass es so einen magischen Brauch gab.
Allerdings kenne ich die Python-Version nicht, obwohl ich mit Python einen Wettbewerbsprofi mache.
Also schrieb ich diesen Artikel mit der Absicht, die Bräuche der starken Wettkampfprofis von Python kennenzulernen. Ich hoffe, es wird für ähnliche Leute hilfreich sein.
Ich habe den Einreichungscode einer starken Person gelesen. Immerhin gab es eine Magie ähnlich der von C ++ Competition Pro, also werde ich versuchen, sie zu entschlüsseln. (Zitiert von einer bestimmten starken Person)
Ich werde den tatsächlichen Code der Reihe nach erklären.
sys.setrecursionlimit(10 ** 6)
Legt die rekursive Tiefe der rekursiven Funktion fest. (Standard ist 1000) Ich verstehe die Bedeutung, aber die Notwendigkeit kommt mir nicht in den Sinn.
Wenn ich es nachgeschlagen habe, scheint es, dass es sich verfängt, also möchte ich es vorerst größer einstellen. Wenn ein Fehler aufgrund dessen auftritt, scheint es sicherlich schwierig zu sein, dies zu bemerken.
Als nächstes fand ich so etwas.
int1 = lambda x: int(x) - 1
Eine Funktion, die die eingegebene Zahl minus eins zurückgibt. Ich frage mich, ob dies der Fall ist ... Ich fühle die Besessenheit eines starken Wettbewerbsprofis lol
p2D = lambda x: print(*x, sep="\n")
Eine Funktion, die die Elemente einer Liste mit einem Zeilenumbruch anzeigt. Sicher, als ich neulich Atcoder gemacht habe, gab es eine gute Szene mit diesem Lol
#Konvertieren Sie die Eingabe in eine Ganzzahl und empfangen Sie sie
def II(): return int(sys.stdin.readline())
def MI(): return map(int, sys.stdin.readline().split())
def MI1(): return map(int1, sys.stdin.readline().split())
#Empfängt ein Array aller Eingaben, die in Ganzzahlen konvertiert wurden
def LI(): return list(map(int, sys.stdin.readline().split()))
#Empfängt ein Array aller Eingaben, die in Ganzzahlen minus 1 konvertiert wurden
def LLI(rows_number): return [LI() for _ in range(rows_number)]
Als Anfänger habe ich nur input () verwendet, also sortiere zuerst die Unterschiede zu readline ().
--readline () liest auch das nachgestellte Zeilenvorschubzeichen --input () löscht das gelesene Zeilenvorschubzeichen (dh den gleichen Wert wie readline (). Rstrip ())
Da jedoch int ('1 \ n') = 1 ist, kann es so beschrieben werden. Die zitierte Person verwendet readline () wie folgt, aber input () scheint ein Ersatz zu sein.
Als nächstes habe ich versucht, die häufig verwendeten Bibliotheken zu identifizieren.
Da Python ein langsames Popup und Anhängen von Arrays hat, schreiben Sie, wenn die Antwort aufgrund der Ausführungszeit falsch ist, wie folgt und verwenden Sie das Deck (Warteschlange an beiden Enden).
from collections import deque
l = deque
l.append(1)
l.pop()
Die nächste Geschichte über das Duplizieren eines Arrays
#Wenn das Array eindimensional ist
list2 = list1[:]
#Für 2 Dimensionen oder mehr
import copy
list2 = copy.deepcopy(list1)
Wenn für eine Dimension "list2 = list1" festgelegt ist, wird list1 auch neu geschrieben, wenn list2 selbst aufgrund der Referenzübergabe neu geschrieben wird. Schreiben Sie es also so. Bei 2 oder mehr Dimensionen wird die Deepcopy verwendet, da sie nicht so beschrieben werden kann.
Haufen (Prioritätswarteschlangen) werden häufig bei Wettkampfprofis verwendet. (Zum Beispiel beim Finden des Medianwerts) Der Heap hat die folgenden Eigenschaften
Die Spezifikation ist so, dass der Minimalwert zum Scheitelpunkt kommt. Wenn Sie also den Maximalwert zum Scheitelpunkt bringen möchten, multiplizieren Sie ihn mit -1 und speichern Sie ihn im Heap.
Sie können den Heap wie folgt behandeln.
import heapq
heap = []
heapq.heappush(heap, 1)
heapq.heappop(heap)
Bei Verwendung eines normalen Wörterbuchs mit Python muss überprüft werden, ob der dem Schlüssel entsprechende Wert vorhanden ist. Das Standard-Diktat erspart Ihnen solche Probleme. (Ich habe das Gefühl, dass es viele Situationen gibt, in denen ich es benutze, auch wenn ich kein Wettkampfprofi bin.)
Verwenden Sie wie folgt
from collections import defaultdict
d = defaultdict(int)
#Um die Standardeinstellung festzulegen, wenn kein Schlüssel vorhanden ist, schreiben Sie wie folgt
d = defaultdict(lambda : 'Initial Value')
Ich denke, es ist ungefähr so, aber ich denke, es fehlen noch viele Dinge, deshalb plane ich, es von Zeit zu Zeit zu aktualisieren. Ich glaube, dass diese Art von Wissen eines Tages in der Praxis nützlich sein wird, und ich werde weiter studieren.
Recommended Posts