Rückblick auf den AtCoder Beginner Contest 153 bis Frage E (Python)

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.

A - Serval vs Monster

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?

B - Common Raccoon vs Monster

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')

C - Fennec vs Monster

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:]))

D - Caracal vs Monster

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.

Zahlen ersetzen

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.

Denken Sie an die Anzahl der Angriffe

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.

x = 1 + 2 + 2^2 + \cdots + 2^{k-1}
= 2^k - 1

Wenn Sie die Konvertierung hier korrekt verfolgen möchten, verwenden Sie bitte die Formel der Summe der Sequenzen mit gleichem Verhältnis.

damit

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)

E - Crested Ibis vs Monster

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

Rückblick auf den AtCoder Beginner Contest 159 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 163 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 164 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 162 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 154 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 153 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 160 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 167 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 157 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 161 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 155 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 156 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 166 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 165 bis Frage E (Python)
atcoder Review des Panasonic Programming Contest 2020, bis zu Frage E (Python)
Überprüfung des Atcoders ABC158 bis Frage E (Python)
AtCoder Beginner Contest 102 Rückblick auf frühere Fragen
AtCoder Beginner Contest 072 Rückblick auf frühere Fragen
AtCoder Beginner Contest 085 Rückblick auf frühere Fragen
AtCoder Beginner Contest 062 Rückblick auf frühere Fragen
AtCoder Beginner Contest 051 Rückblick auf frühere Fragen
AtCoder Beginner Contest 127 Rückblick auf frühere Fragen
AtCoder Beginner Contest 119 Rückblick auf frühere Fragen
AtCoder Beginner Contest 151 Rückblick auf frühere Fragen
AtCoder Beginner Contest 075 Rückblick auf frühere Fragen
AtCoder Beginner Contest 110 Rückblick auf frühere Fragen
AtCoder Beginner Contest 117 Rückblick auf frühere Fragen
AtCoder Beginner Contest 070 Rückblick auf frühere Fragen
AtCoder Beginner Contest 105 Rückblick auf frühere Fragen
AtCoder Beginner Contest 112 Rückblick auf frühere Fragen
AtCoder Beginner Contest 076 Rückblick auf frühere Fragen
AtCoder Beginner Contest 089 Rückblick auf frühere Fragen
AtCoder Beginner Contest 079 Rückblick auf frühere Fragen
AtCoder Beginner Contest 056 Rückblick auf frühere Fragen
AtCoder Beginner Contest 087 Rückblick auf frühere Fragen
AtCoder Beginner Contest 067 Rückblick auf frühere Fragen
AtCoder Beginner Contest 046 Rückblick auf frühere Fragen
AtCoder Beginner Contest 123 Überprüfung früherer Fragen
AtCoder Beginner Contest 049 Rückblick auf frühere Fragen
AtCoder Beginner Contest 078 Rückblick auf frühere Fragen
AtCoder Beginner Contest 081 Rückblick auf frühere Fragen
AtCoder Beginner Contest 047 Rückblick auf frühere Fragen
AtCoder Beginner Contest 060 Rückblick auf frühere Fragen
AtCoder Beginner Contest 104 Rückblick auf frühere Fragen
AtCoder Beginner Contest 057 Rückblick auf frühere Fragen
AtCoder Beginner Contest 121 Rückblick auf frühere Fragen
AtCoder Beginner Contest 126 Rückblick auf frühere Fragen
AtCoder Beginner Contest 090 Rückblick auf frühere Fragen
AtCoder Beginner Contest 103 Rückblick auf frühere Fragen
AtCoder Beginner Contest 061 Rückblick auf frühere Fragen
AtCoder Beginner Contest 059 Rückblick auf frühere Fragen
AtCoder Beginner Contest 044 Rückblick auf frühere Fragen
AtCoder Beginner Contest 083 Rückblick auf frühere Fragen
AtCoder Beginner Contest 048 Rückblick auf frühere Fragen
AtCoder Beginner Contest 124 Rückblick auf frühere Fragen
AtCoder Beginner Contest 116 Rückblick auf frühere Fragen
AtCoder Beginner Contest 097 Rückblick auf frühere Fragen
AtCoder Beginner Contest 088 Rückblick auf frühere Fragen
AtCoder Beginner Contest 092 Rückblick auf frühere Fragen
AtCoder Beginner Contest 099 Rückblick auf frühere Fragen
AtCoder Beginner Contest 065 Rückblick auf frühere Fragen