Letztes Mal Heute werden wir das Boot Camp für Anfänger für At Coder Probleme ausfüllen. Der Schwierigkeitsgrad ist Mittel.
#33 AGC029-A 1TLE
** Gedanken ** schwer. B und W werden umgeschaltet, wenn die Operation ausgeführt wird. Schließlich befindet sich W links und B rechts. Damit $ W_i (1 \ leq i \ leq N) $ nach links geht, müssen Sie alle Bs links von diesem W bearbeiten. Wenn Sie also die Zahl B links von $ W_i (1 \ leq i \ leq N) $ hinzufügen, ist die Antwort korrekt.
s = list(input())
ans = 0
count_b = 0
n = len(s)
for i in range(n):
if s[i] == 'B':
count_b += 1
if s[i] == 'W':
ans += count_b
print(ans)
ABC139-D 1WA
** Gedanken ** Es ist ein Problem mit dem Rest. Finden Sie den Maximalwert des gesamten Restbetrags, wenn $ i (1 \ leq i \ leq N $ durch $ P_i $ geteilt wird) für die Zahlenfolge $ P $, in der ganze Zahlen bis zu $ N $ neu angeordnet werden. $ Denkt, dass die ganzen Zahlen bis zu $ N $ in aufsteigender Reihenfolge angeordnet sind. Wenn Sie den Vorgang fortsetzen, beträgt der Restbetrag 0. Wenn Sie $ P $ um eins nach rechts verschieben, beträgt er $ N-1 $. Dies liegt daran, dass $ P_i $ 1 kleiner als $ i $ ist, was bedeutet, dass beim Verschieben nach links die Summe der verbleibenden Reste maximiert wird, da beim Verschieben nach links $ kleiner als $ i $ ist. P_i $ wird um 1 erhöht. Dann ist $ i % P_i = i $. Beachten Sie, dass der Rest nur bei $ P_i = 1 $ 0 ist, die Summe der verbleibenden $ \ frac {N (N) -1)} {2} $. Detaillierte Beweise finden Sie in der Erklärung.
n = int(input())
print(n*(n-1)//2)
Ich mache mir Sorgen um das ABC von morgen, weil ich mich in letzter Zeit nicht hingegeben habe. Wir sehen uns wieder, gute Nacht.
Recommended Posts