AtCoder ABC169 Dies ist eine Zusammenfassung der Probleme des AtCoder Beginner Contest 169, die am 31.05.2020 (So) aufgetreten sind, beginnend mit Problem A und unter Berücksichtigung der Überlegungen. Das erste Halbjahr befasst sich mit Fragen bis ABC. Das Problem wird zitiert, aber bitte überprüfen Sie die Wettbewerbsseite für Details. Klicken Sie hier für die Wettbewerbsseite Offizieller Kommentar PDF
Problemstellung Finde $ A × B $.
Es nahm die Eingabe und Ausgabe des Produkts.
abc169a.py
a, b = map(int, input().split())
print(a * b)
Problemstellung $ N $ ganze Zahlen $ A_1, ..., A_N $ sind angegeben. Finde $ A_1 × ... × A_N $. Wenn das Ergebnis jedoch $ 10 ^ {18} $ überschreitet, geben Sie stattdessen "-1" aus.
Ich habe an Python teilgenommen, aber es fiel mir schwer. Es wäre schlecht, wenn am Ende der Eingabe eine 0 wäre, also habe ich ein Programm geschrieben, das alle Werte multipliziert und es wurde "TLE". Wenn ich überprüfen könnte, ob es am Anfang eine 0 gab, hätte ich nicht so viel mit Python zu kämpfen gehabt, aber ich habe mehr Zeit als erwartet verbracht und die Strafen überschnitten sich (Reue). Ich war optimistisch, dass es in Ordnung sein würde, da es für Python keine Obergrenze für den Int-Typ gibt, aber ich wusste nicht, dass die Berechnungskosten stetig steigen würden.
abc169b.py
n = int(input())
a_list = list(map(int, input().split()))
if 0 in a_list:
print(0)
else:
ans = 1
flag = 1
for i in range(0, n):
ans *= int(a_list[i])
if ans > 10 ** 18:
flag = 0
break
if flag == 0:
print(-1)
else:
print(ans)
Übrigens habe ich 4 mal Pena ausgegeben.
Problemstellung Schneiden Sie $ A × B $ ab und geben Sie das Ergebnis als Ganzzahl aus. Einschränkungen ・ $ 0 \ leq A \ leq 10 ^ {15} $ ・ $ 0 \ leq B <10 $ ・ $ A $ ist eine ganze Zahl ・ $ B $ wird bis zum Bruchteil $ 2 $ abgegeben
Ich wusste, dass es einen Fehler bei der Berechnung von Brüchen geben würde, also dachte ich, wenn ich es mit 100 multipliziere, um es zu einer ganzen Zahl zu machen, könnte ich es ohne Probleme berechnen, also reichte ich eine Methode ein, um die Eingabe $ B $ mit 100 zu multiplizieren. Ich wurde jedoch "WA" und war verzweifelt. Der Code, der das erste übermittelte "WA" zurückgegeben hat.
abc169c.py
a, b = input().split()
a = int(a)
b = int(float(b) * 100)
print(a * b // 100)
Ich wusste nicht, was die Ursache war, und ich habe verschiedene Dinge ausprobiert, aber es ging nicht durch, und am Ende konvertierte ich die Zeichenfolge direkt als dreistellige Ganzzahl in eine Zahlenfolge, anstatt die Eingabe $ B $ in float umzuwandeln. Ich konnte "AC" bestehen. Ich habe erfahren, dass ein Fehler auch dann auftritt, wenn ein Bruch mit 100 multipliziert wird, um ihn zu einer Ganzzahl zu machen (das Beispiel wurde ohne Probleme gelöst, sodass die Ursache völlig unbekannt war).
abc169c.py
a, b = input().split()
a = int(a)
b = int(''.join(b.split(".")))
x = a * b
print(x // 100)
Das C-Problem war auch 4 Pena vor der Ausgabe von "AC".
Dies ist das Ende der ersten Hälfte. Persönlich fühlte ich mich wie eine Auswahl von Teilen, in denen ich nicht gut war, und ich war ungeduldig, dass ich nur Problem A hatte und die Rate klapperte, was meiner Meinung nach der Grund ist, warum die Lösung lange gedauert hat. Ich war während des Wettbewerbs wirklich verzweifelt, weil ich den Grund nicht kannte (weil sich die Anzeigemethode der Richterergebnisse ohne Vorankündigung änderte und ich nicht einmal wusste, wie viele Probleme ich durchstehen konnte). Vielen Dank für das Lesen bis zum Ende der ersten Hälfte.
In der zweiten Hälfte wird das DEF-Problem erläutert. Fortsetzung in der zweiten Hälfte.
Recommended Posts