Was ist besser, PyPy oder Python?

Wenn es mit Python zu TLE wird, können Sie mit PyPy AC erhalten, und umgekehrt, wenn Sie mit PyPy TLE werden, können Sie mit Python AC erhalten.

Beispiel für AC in Python und TLE in PyPy

In Problem A des typischen AtCoder-Wettbewerbs 001 tritt ein Problem bei der Suche nach Tiefenprioritäten auf.

Also habe ich den folgenden Code geschrieben.

test.py


import sys

sys.setrecursionlimit(500*500)
def dfs(px,py):
	if px < 0 or py < 0 or px > w-1 or py > h-1:
		return False

	if c[py][px] == '#':
		return False
	if c[py][px] == 'g':
		return True

	c[py][px] = '#'

	if dfs(px-1,py):
		return True
	if dfs(px,py-1):
		return True
	if dfs(px+1,py):
		return True
	if dfs(px,py+1):
		return True

	return False

h,w = map(int,input().split())

c = []
for i in range(h):
	s = input()
	x = s.find('s')
	if x != -1:
		start = [x,i]
	c.append(list(s))

sx = int(start[0])
sy = int(start[1])

if dfs(sx,sy):
	print('Yes')
else:
	print('No')

Ich denke, dass es als Tiefenprioritätssuche ziemlich einfach geschrieben ist.

Als Ergebnis dieser Übermittlung wurde es wie folgt.

スクリーンショット 2020-03-06 20.45.37.png

Ich habe AC in Python3, aber es ist TLE in PyPy3 geworden.

Dies scheint darauf zurückzuführen zu sein, dass ** PyPy nicht mit rekursiven Funktionen kompatibel ist **.

Sie können AC in beide Richtungen verwenden, indem Sie den Stapel leise verwenden, ohne rekursive Funktionen zu verwenden.

Beispiel für AC mit PyPy und TLE mit Python

AtCoder Beginner Contest 153 E Problem war ein Problem, das mithilfe dynamischer Planung gelöst werden konnte.

Also habe ich den folgenden Code geschrieben.

test.py


H,N= map(int,input().split())

a = []
b = []

for i in range(N):
  a_dash,b_dash = map(int,input().split())
  a.append(a_dash)
  b.append(b_dash)

#dp[i+1][j] =Werde ein Monster mit körperlicher Stärke j mit Magie bis zu i
#Minimale Menge an magischer Kraft, die gewonnen werden kann
INF = 10**9
dp = [[INF for _ in range(H+1)] for _ in range(N+1)]

#Monster mit 0 Gesundheit sterben von Anfang an
for i in range(N+1):
  dp[i][0] = 0

for i in range(N):
  for j in range(H+1):
    if a[i] > j:
      dp[i+1][j] = min(dp[i][j],b[i])
    else:
      dp[i+1][j] = min(dp[i][j],dp[i+1][j-a[i]]+ b[i])

print(dp[N][H])

Ohne besonderen Einfallsreichtum ähnelt der Code einfach dem Problem der unbegrenzten Anzahl von Rucksäcken.

Als ich dies einreichte, wurden die folgenden Ergebnisse zurückgegeben.

スクリーンショット 2020-03-06 20.40.32.png

Diesmal wurde es AC mit PyPy und TLE mit Python3.

Natürlich gibt es auch eine Möglichkeit, dies in Python zu lösen.

Welches soll ich denn verwenden?

** Ich denke, die richtige Antwort ist, eine schöne Antwort zu schreiben, die es Ihnen ermöglicht, AC zu erhalten, unabhängig davon, welche Sie verwenden.

Da ich jedoch ein Anfänger in Wettkampfprofis bin, werde ich PyPy vorerst verwenden und Python verwenden, wenn ich rekursive Funktionen verwende **.

PyPy scheint übrigens den Nachteil zu haben, dass einige in C-Sprache geschriebene Bibliotheken nicht verwendet werden können.

Schließlich

Da ich ein Anfänger im Wettbewerb bin, weisen Sie bitte auf Unzulänglichkeiten in den oben genannten Inhalten hin.

Recommended Posts

Was ist besser, PyPy oder Python?
Was ist besser, wenn Pythons Standardeingabe input () oder sys.stdin empfängt?
[Anfänger sind besorgt] Was ist besser, Ruby, PHP oder Python?
Was ist schneller, Python Shuffle oder Sample?
[Linux] Ende des Prozesses oder Jobs, was ist besser?
Golang vs. Python - Ist Golang besser als Python?
Analyse nach Bayes'schem Denken (1) ... Was ist besser, A oder B?
[Python] Was wird zuerst ausgeführt, Klassenvariable oder __init__?
Bestimmen des Betriebssystems, auf dem Python ausgeführt wird
Python ist einfach
Was ist Python?
Python ist eine Instanz
Was ist Python?
[Python] Was verwendet werden sollte, return oder return None
Python Int ist unendlich
Python> Liste> verlängern () oder + =
Python aus oder importieren
Python> Überprüfen Sie NoneType oder nicht> wenn a == None:> wenn a None ist:
Memorandum @ Python ODER Seminar
[Python] Was ist virtualenv?
Dies ist schneller zu verwenden, wenn Anweisung oder Wörterbuchtyp beim Konvertieren einer Zeichenfolge (a-> b) in Python
Welches ist schließlich das beliebteste Python-Visualisierungstool?
Welches sollte ich für die Datenanalyse studieren, R oder Python?
[Python] Ist das null, aber nicht leere Objekt wahr oder falsch?
Python-Runde ist nicht streng rund
[Python] Effizienteres Debuggen!
Was ist Mini Sam oder Mini Max?
Python 3.4 oder höher Standard Pip
Verwendung von __dict__ in Python
Pypy Bool Typ ist langsam
Python ist schmerzhaft. Aber benutze
Python ist eine Sprache für Erwachsene
Memorandum @ Python ODER Seminar: matplotlib
[Python] Python und Sicherheit - is Was ist Python?
Memorandum @ Python ODER Seminar: Pulp
Schnellerer Python-Release-Zyklus!
Python-Bitoperator und logische Summe
[Python] * args ** Was ist kwrgs?
Memorandum @ Python ODER Seminar: Pandas
Memorandum @ Python ODER Seminar: Scikit-Learn
Rubys `` wie in Python. 2.6 oder höher
Identität und Äquivalenz: ist und == in Python
Python oder und und Operatorfalle
Python-Grundkurs (1 Was ist Python?)
Wenn ein Anfänger im Dezember 2019 R oder Python lernt, welches?
Was ist besser, PyPy oder Python?
Was ist schneller, Python Shuffle oder Sample?
Zusammenfassung der Grammatik, die bei matplotlib oft vergessen wird
[Linux] Ende des Prozesses oder Jobs, was ist besser?
Was ist besser, wenn Pythons Standardeingabe input () oder sys.stdin empfängt?