Der Code in AtCoder Beginners Selection Experience funktioniert in Python 2 nicht mehr, daher habe ich versucht, ihn erneut zu lösen, um festzustellen, um wie viel er sich verbessert hat.
PracticeA - Welcome to AtCoder
8 Minuten → 2 Minuten. Die durch Leerzeichen getrennte Zeichenfolge wurde von% generiert. Sie änderte sich jedoch, als mir klar wurde, dass die durch Kommas getrennte Druckzeichenfolge durch Leerzeichen getrennt werden würde.
a = int(raw_input())
b, c = [int(e) for e in raw_input().split()]
s = raw_input()
print "%d %s" % (a + b + c, s)
↓
a = int(input())
b, c = map(int, input().split())
s = input()
print(a + b + c, s)
2 Minuten → 1 Minute. Die Reihenfolge von ungerade und gerade wurde umgekehrt.
a, b = [int(e) for e in raw_input().split()]
if a * b % 2 == 0:
print 'Even'
else:
print 'Odd'
↓
a, b = map(int, input().split())
if a * b % 2 == 1:
print('Odd')
else:
print('Even')
4 Minuten → 30 Sekunden. Es scheint, dass er zu diesem Zeitpunkt nicht wusste, wie man zählt.
print len([c for c in raw_input() if c == '1'])
↓
s = input()
print(s.count('1'))
9 Minuten → 3 ½ Minuten. Einmaliges Lesen durch Öffnen (0). Lesen (). Die Richtlinie unterscheidet sich stark von der Verarbeitung nacheinander und dem Wiederholen der Prüfung, um festzustellen, ob alle einmal unterbrochen wurden.
n = int(raw_input())
a = [int(e) for e in raw_input().split()]
i = 0
while True:
if any(e % 2 == 1 for e in a):
break
i += 1
a = [e / 2 for e in a]
print i
↓
N, *A = map(int, open(0).read().split())
result = float('inf')
for a in A:
t = 0
while a % 2 == 0:
t += 1
a //= 2
result = min(result, t)
print(result)
4 Minuten → 2 Minuten. Round-Robin, es gibt keinen großen Unterschied.
a = int(raw_input())
b = int(raw_input())
c = int(raw_input())
x = int(raw_input())
result = 0
for i in range(a + 1):
for j in range(b + 1):
for k in range(c + 1):
if i * 500 + j * 100 + k * 50 == x:
result += 1
print result
↓
A, B, C, X = map(int, open(0).read().split())
result = 0
for a in range(A + 1):
for b in range(B + 1):
for c in range(C + 1):
if X == 500 * a + 100 * b + 50 * c:
result += 1
print(result)
6 Minuten → 3 Minuten. Die Richtlinie war unterschiedlich, ob die Summe jeder Ziffer direkt berechnet oder in eine Zeichenfolge konvertiert werden sollte.
n, a, b = [int(e) for e in raw_input().split()]
result = 0
for i in range(1, n + 1):
if a <= sum(int(e) for e in str(i)) <= b:
result += i
print result
↓
N, A, B = map(int, input().split())
result = 0
for i in range(1, N + 1):
c = 0
t = i
while t != 0:
c += t % 10
t //= 10
if A <= c <= B:
result += i
print(result)
7 Minuten → 1 ½ Minuten. Die Richtlinie ist fast dieselbe, aber es scheint, dass er zu diesem Zeitpunkt die umgekehrte Sortieroption nicht kannte.
n = int(raw_input())
a = [int(e) for e in raw_input().split()]
a.sort()
a.reverse()
print sum(a[::2]) - sum(a[1::2])
↓
N, *a = map(int, open(0).read().split())
a.sort(reverse=True)
print(sum(a[::2]) - sum(a[1::2]))
3 Minuten → 1 ½ Minuten. Ich erinnere mich daran.
n = int(raw_input())
d = [int(raw_input()) for i in range(n)]
print len(set(d))
↓
N, *d = map(int, open(0).read().split())
print(len(set(d)))
7 Minuten → 3 Minuten. Nun, es ist ein Kreisverkehr, daher gibt es keinen großen Unterschied in der Politik. Nur die Verwendung des Drucks hat sich geändert.
import sys
n, y = [int(e) for e in raw_input().split()]
for i in range(n + 1):
for j in range(n + 1 - i):
k = n - i - j
if 10000 * i + 5000 * j + 1000 * k == y:
print "%d %d %d" % (i, j, k)
sys.exit()
print "-1 -1 -1"
↓
N, Y = map(int, input().split())
for i in range(N + 1):
for j in range(N + 1 - i):
k = N - i - j
if 10000 * i + 5000 * j + 1000 * k == Y:
print(i, j, k)
exit()
print(-1, -1, -1)
Ungefähr 1 Stunde → 12 Minuten. Ich erinnerte mich, dass ich es umdrehen sollte. Wurde es jedoch beim letzten Mal mit dem Algorithmus * O * (* N * 2 </ sup>) in Vorwärtsrichtung festgeschraubt? Die Geschwindigkeit stieg von 1223 ms auf 41 ms.
import sys
s = raw_input()
ts = ['']
while True:
nts= []
for t in ts:
for w in ['dreamer', 'eraser', 'dream', 'erase']:
if s == t + w:
print 'YES'
sys.exit()
if s.startswith(t + w):
nts.append(t + w)
if len(nts) == 0:
print 'NO'
sys.exit()
ts = nts
↓
S = input()
S = S[::-1]
candidates = [s[::-1] for s in ['dream', 'dreamer', 'erase', 'eraser']]
i = 0
while i < len(S):
for c in candidates:
if S.startswith(c, i):
i += len(c)
break
else:
print('NO')
exit()
print('YES')
Ungefähr 40 Minuten → 8 ½ Minuten. Ich habe auf gepufferte E / A umgestellt, also 337 ms → 131 ms. Es ist fast gleich, aber der Code hat sich stark geändert, da es unterschiedlich ist, ob die Eingabe zu Beginn zusammen verarbeitet wird oder nicht.
import sys
n = int(raw_input())
data = [map(int, raw_input().split()) for i in range(n)]
t = 0
x = 0
y = 0
for d in data:
duration = d[0] - t
distance = abs(x - d[1]) + abs(y - d[2])
if (distance > duration) or ((duration - distance) % 2 == 1):
print 'No'
sys.exit()
t = d[0]
x = d[1]
y = d[2]
print 'Yes'
↓
from sys import stdin
readline = stdin.readline
N = int(readline())
pt, px, py = 0, 0, 0
for _ in range(N):
t, x, y = map(int, readline().split())
d = abs(x - px) + abs(y - py)
if d > t - pt:
print('No')
break
if (t - pt - d) % 2 == 1:
print('No')
break
pt, px, py = t, x, y
else:
print('Yes')