Es ist eine einfache Zeit, aber ich hatte das Gefühl, dass das D-Problem ein grundlegendes und gutes Problem ist. Dieses Mal habe ich AtCoder Virtual Contest verwendet.
Durch 8 ersetzen. Da der String unveränderlich ist, denke ich, dass er entweder einmal (zuerst) geteilt oder in eine Liste geändert und ersetzt (zweitens) wird.
answerA1.py
s=input()
print(s[:3]+"8"+s[4:])
answerA2.py
s=list(input())
s[3]="8"
print("".join(s))
Es ist nicht möglich, Reiskuchen mit demselben Durchmesser zu verwenden. Daher sollten Sie Duplikate ausschließen. Sie können set dafür verwenden.
answerB.py
n=int(input())
d=[int(input()) for i in range(n)]
print(len(set(d)))
Da y ein Vielfaches von 1000 ist, können Sie es durch 1000 teilen und über die Gleichung 10i + 5j + k = y nachdenken (0 <= i, j, k <= n, i + j + k = n). Eine solche Ungleichung sollte an der Stelle entschieden werden, an der der Koeffizient groß ist, und bei diesem Problem wird sie in der Reihenfolge i → j → k entschieden. 0 ~ y // 10 ist ein Kandidat für i, 0 ~ (y-i * 10) // 5 ist ein Kandidat für j und k wird bestimmt. Wenn Sie das oben Gesagte für alle i und j ausprobieren, können Sie eine Antwort finden, die Ihren Anforderungen entspricht.
answerC.py
from sys import exit
n,y=map(int,input().split())
y//=1000
for i in range(y//10+1):
#k: Wie viel ist noch übrig?
#l: Wie viele Blätter wurden verwendet?
k1=y-i*10
for j in range(k1//5+1):
k=k1-j*5
l=i+j
if k==n-l and i>=0 and j>=0 and k>=0:
print(str(i)+" "+str(j)+" "+str(k))
exit()
print("-1 -1 -1")
Wenn Sie entscheiden können, welches Schwert Sie schwingen und wie oft Sie werfen möchten, bevor Sie das Monster besiegen, können Sie unabhängig von der Reihenfolge entscheiden. Zunächst einmal, in Bezug darauf, wie oft welches Schwert geschwungen werden muss, da jedes Schwert mehrmals geschwungen werden kann und das Schwert mit dem höheren Punkt geschwungen werden sollte, nur das Schwert mit dem höchsten Punkt ** ** (Punkt $ a_k $) Es ist am besten, weiter zu zittern. In Bezug auf das zu werfende Schwert ist es nicht erforderlich, ein Schwert zu werfen, dessen Punkt (wenn geworfen) niedriger als der Punkt $ a_k $ ist (der Punkt ist besser, das Schwert stattdessen mit Punkt $ a_k $ zu schwingen. Weil es teuer ist). Wurfschwerter sind daher alle Schwerter mit höheren Punkten (wenn sie geworfen werden) als Punkt $ a_k $. Ausgehend von der obigen Überlegung wird zunächst unter der Annahme, dass alle Schwerter mit höheren Punkten (wenn sie geworfen werden) als Punkt $ a_k $ geworfen werden, in der Reihenfolge vom H-Punkt gezogen, und selbst wenn angenommen wird, dass alle von ihnen geworfen werden, H. Wenn Sie nicht mehr Schaden als Punkte anrichten können, können Sie das Schwert mit den Punkten $ a_k $ so oft schwingen, wie Sie benötigen.
answerD.py
import math
n,h=map(int,input().split())
ab=[list(map(int,input().split())) for i in range(n)]
ab.sort(reverse=True)
k=ab[0][0]
ab.sort(reverse=True,key=lambda x:x[1])
ans=0
while h>0:
if ans==n:
break
if k<=ab[ans][1]:
h-=ab[ans][1]
ans+=1
else:
break
if h<=0:
print(ans)
else:
print(ans+math.ceil(h/k))
Recommended Posts