AtCoder ABC172 Dies ist eine Zusammenfassung der Probleme des AtCoder Beginner Contest 172, die am Samstag, den 27.06.202020 aufgetreten sind, beginnend mit Problem A und unter Berücksichtigung der Überlegungen. Das erste Halbjahr befasst sich mit Fragen bis zu ABCD. 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 Die Ganzzahl $ a $ wird eingegeben. Geben Sie den Wert $ a + a ^ 2 + a ^ 3 $ aus.
abc172a.py
a = int(input())
print(a + a**2 + a**3)
Problemstellung Angesichts der Zeichenfolgen $ S, T $. Wenn Sie $ S $ durch Wiederholen der folgenden Operationen in $ T $ ändern, ermitteln Sie die Mindestanzahl von Operationen. Operation: Wählen Sie das $ 1 $ -Zeichen von $ S $ aus und schreiben Sie es mit einem anderen Zeichen neu
Ich habe mit der for-Anweisung überprüft, ob jedes Zeichen von vorne übereinstimmt.
abc172b.py
s = input()
t = input()
count = 0
for i in range(len(s)):
if s[i] != t[i]:
count +=1
print(count)
Problemstellung Es gibt zwei Schreibtische A und B. Schreibtisch A hat $ N $ Bücher und Schreibtisch B hat $ M $ Bücher, die vertikal gestapelt sind. Das Buch $ (1 \ leq i \ leq N) $, das derzeit auf Schreibtisch A an der $ i $ -ten Position von oben geladen ist, benötigt $ A_i $ Minuten zum Lesen, und Schreibtisch B befindet sich derzeit an der $ i $ -ten Position von oben. Das geladene Buch $ (1 \ leq i \ leq M) $ muss $ B_i $ lesen. Betrachten Sie die folgenden Aktionen. ・ Wählen Sie den Schreibtisch aus, an dem das Buch verbleibt, lesen Sie das Buch oben auf dem Schreibtisch und entfernen Sie es vom Schreibtisch. Wie viele Bücher können Sie lesen, wenn Sie diese Aktion wiederholen, damit die Gesamtreisezeit $ K $ nicht überschreitet? Ignorieren Sie die Zeit, die außer dem Lesen eines Buches benötigt wird.
Vorläufig dachte ich, ich würde es rekursiv lösen, aber es war klar, dass die Ausführung einige Zeit dauern würde, also schrieb ich den Code mit unterschiedlichem Einfallsreichtum. Ich wollte in der Lage sein, so einfach zu schreiben, indem ich den Referenzcode von Python in die Erklärung einbezog.
abc172c.py
n, m, k = map(int, input().split())
a_list = list(map(int, input().split()))
b_list = list(map(int, input().split()))
new_a_list = [[0, 0]]
a_sum = 0
for i in range(0, n):
a_sum += a_list[i]
if a_sum <= k:
new_a_list.append([i + 1, a_sum])
else:
break
best = len(new_a_list) - 1
b_sum = 0
a_sum = new_a_list[-1][1]
a_count = new_a_list[-1][0]
flag = 1
for i in range(0, m):
b_sum += b_list[i]
while True:
if b_sum <= k - a_sum:
if best < i + 1 + a_count:
best = i + 1 + a_count
break
if a_count == 0:
flag = 0
break
a_count -= 1
a_sum = new_a_list[-(len(new_a_list) - a_count)][1]
if flag == 0:
break
print(best)
Problemstellung Sei $ f (X) $ die Anzahl der positiven Brüche von $ X $ für die positive ganze Zahl $ X $. Wenn eine positive ganze Zahl $ N $ gegeben ist, finden Sie $ \ sum_ {K = 1} ^ {N} K × f (K) $.
Überwältigender Mangel an mathematischen Fähigkeiten (Schweiß) Ich konnte es nicht lösen, also konnte ich es lösen, indem ich implementierte, was in der Erklärung geschrieben stand.
abc172d.py
n = int(input())
total = 0
for j in range(1, n + 1):
x = j
y = n // x
total += y * (y + 1) * x // 2
print(total)
Die Implementierung war einfach, aber ich konnte mir das nicht vorstellen, und das Ausführungszeitlimit: 3 Sekunden wurde an erster Stelle übersehen. (Ich denke nicht, dass es gelöst werden kann, auch wenn es nicht übersehen wird)
Dies ist das Ende der ersten Hälfte. Vielen Dank für das Lesen bis zum Ende der ersten Hälfte.
Die zweite Hälfte wird das EF-Problem erklären, aber ich glaube nicht, dass ich rechtzeitig einen Artikel schreiben kann (Schweiß).
Recommended Posts