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.
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.
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.
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.
Diesmal wurde es AC mit PyPy und TLE mit Python3.
Natürlich gibt es auch eine Möglichkeit, dies in Python zu lösen.
** 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.
Da ich ein Anfänger im Wettbewerb bin, weisen Sie bitte auf Unzulänglichkeiten in den oben genannten Inhalten hin.
Recommended Posts