Freunde mal.
Dies ist ein Übersichtsartikel für Anfänger von Wettkampfprofis.
Die Lösung, die ich hier schreibe, wird geschrieben, während ich mir den Kommentar und die Beiträge anderer Leute ansehe. Es ist möglicherweise nicht das, was Sie tatsächlich eingereicht haben.
Es ist eine Frage, die Anzahl der Angriffe zu beantworten, die erforderlich sind, um die physische Stärke H mit der Angriffskraft A zu verringern.
Die Antwort ist, "H / A" aufzurunden. Ich habe math.ceil ()
für den Aufrundungsprozess verwendet.
import math
H, A = map(int, input().split())
print(math.ceil(H/A))
Ich habe übrigens gehört, dass math.ceil ()
einen Fehler verursachen kann, wenn die Zahl zu groß ist. Es ist in Ordnung, etwas wie "(H + A-1) // A" zu schreiben, aber es hat mir nicht gefallen, also habe ich es leicht nachgeschlagen.
Der folgende in [diesem Artikel] eingeführte Schreibstil (https://qiita.com/greenteabiscuit/items/d36b74e4492ba028b136) ist möglicherweise intelligent.
H, A = map(int, input().split())
print(-(-H//A))
Wie schreibe ich - (- H // A)
. Die Kürzungsverarbeitung mit einer negativen Zahl scheint die gleiche Verarbeitung wie die Aufrundung zu sein, z. B. "-0,1" → "-1". Ich habe es übrigens in anderen Antworten gesehen. Sollte ich dies in Zukunft so oft wie möglich verwenden?
Es ist eine Frage zu beantworten, ob Sie Ihre körperliche Stärke $ H $ abschneiden können, indem Sie die Power $ A_i $ -Technik voll ausnutzen.
Wenn der Gesamtwert des Spezialzugs größer als die physische Stärke ist, wird "Ja" ausgegeben.
H, N = map(int, input().split())
A = list(map(int, input().split()))
if H <= sum(A):
print('Yes')
else:
print('No')
Wenn Sie Monster besiegen, indem Sie die Techniken "1 Schaden verursachen" (unbegrenzt oft) und "sofort töten" (bis zu K-mal) voll ausnutzen, ist es ein Problem, die Anzahl der normalen Angriffe zu beantworten.
Ordne die HP der Monster in der richtigen Reihenfolge an und schließe K Monster in absteigender Reihenfolge aus. Die Antwort ist die Gesamtzahl der verbleibenden HP.
Beachten Sie, dass K häufiger als N sein kann (eine Niederlage).
N, K = map(int, input().split())
H = list(map(int, input().split()))
H.sort()
print(sum(H[:max(N-K, 0)]))
Nachtrag: Wenn Sie einen negativen Wert für den Index des Arrays in Python verwenden, verhält es sich besonders.
a = [0, 1]
print(a[2:]) #Der hervorstehende Index wird durchlaufen
# []
print(a[-1:]) #Überhängende Indizes werden in entgegengesetzter Richtung gezählt
# [1]
Ich habe die Verarbeitung "max" hinzugefügt, um diese Spezifikation zu vermeiden. Wenn Sie sie jedoch wie folgt schreiben, müssen Sie N und K nicht vergleichen.
N, K = map(int, input().split())
H = list(map(int, input().split()))
H.sort(reverse=True)
print(sum(H[K:]))
Es ist ein Problem, die Anzahl der Angriffe zu beantworten, die für ein Monster erforderlich sind, das sich aufteilt (abgeschnitten), indem HP beim Angriff halbiert werden.
Erstens führt HP immer eine Kürzungsverarbeitung durch. Selbst wenn der angegebene Wert $ H $ in $ 2 ^ {k-1} $ konvertiert wird (jedoch $ 2 ^ {k-1} \ leq H <2 ^ k $). Es wird genauso oft sein.
Zählen wir also die Anzahl der Angriffe gegen Monster mit $ 2 ^ {k-1} $ HP.
Greife zuerst ein Monster an, dessen HP $ 2 ^ {k-1} $ beträgt. Das ist einmal.
Als nächstes zwei Monster mit HP von $ 2 ^ {k-2} $. Das ist zweimal.
Als nächstes kommt ein $ 2 ^ 2 $ Monster mit $ 2 ^ {k-3} $, dies ist $ 2 ^ 2 $ mal.
...
Wiederholen Sie dies und treffen Sie schließlich das $ 2 ^ {k-1} $ -Monster mit HP1 $ 2 ^ {k-1} $ mal, um zu gewinnen.
Machen wir daraus eine Formel.
Wenn Sie die Konvertierung hier korrekt verfolgen möchten, verwenden Sie bitte die Formel der Summe der Sequenzen mit gleichem Verhältnis.
Sie erhalten die Antwort, indem Sie "den Wert durch $ 2 ^ {k-1} $ ersetzen" und "$ 2 ^ {k} -1 $ ausgeben". Ich habe den folgenden Code geschrieben.
H = int(input())
k = 0
while H:
H //= 2
k += 1
print(2**k-1)
Magische Kraft $ A_i $ und verbrauche magische Kraft $ B_i $ werden weitergegeben. Es ist eine Frage, so wenig magische Kraft wie möglich zu beantworten, um das gegebene H abzukratzen.
Ich habe es in einem einfachen DP eingereicht und es hat bestanden. Speichern Sie einfach den minimalen Stromverbrauch in einem Array für jeden HP-Wert und aktualisieren Sie den minimalen Wert der Reihe nach. Ich gewöhne mich an dynamische Planung.
H, N = map(int, input().split())
magic = [tuple(map(int, input().split())) for _ in range(N)]
DP = [0] + [10**9]*H
for h in range(H):
for damage, mp in magic:
DP[min(h + damage, H)] = min(DP[min(h + damage, H)], DP[h] + mp)
print(DP[H])
Dies wurde jedoch nur von PyPy3 bestanden, und TLE wurde in Python3 veröffentlicht. Als wir uns anschauten, was mit Python passiert ist, gab es eine Antwort, die sich mit der Einschlussnotation beschleunigte. Ich werde es umschreiben.
H, N = map(int, input().split())
magic = [tuple(map(int, input().split())) for _ in range(N)]
DP = [0] * (H+10**4)
for h in range(1, H+1):
DP[h] = min(DP[h - damage] + mp for damage, mp in magic)
print(DP[H])
Beachten Sie, dass sich die Bedeutung von h
, für die for gedreht wird, vom vorherigen Code unterscheidet. Jetzt ging es in Python vorbei.
Das ist alles für diesen Artikel. Obwohl es ein früherer Wettbewerb war, bin ich froh, dass ich Frage E zum ersten Mal alleine lösen konnte.
Recommended Posts