Questions passées résolues pour la première fois
Quand je l'ai écrit avec un opérateur ternaire, le nombre de caractères était petit, donc je pouvais le taper rapidement
answerA.py
a,b=map(int,input().split())
print(a+b if a+b<10 else "error")
Qu'une couverture soit définie ou non, l'opérateur ternaire a également été utilisé ici
answerB.py
s=list(input())
t=list(set(s))
print("yes" if len(s)==len(t) else "no")
S'il n'y a qu'un multiple de 10, la somme est toujours un multiple de 10, donc 0 est affiché. S'il y a quelque chose qui n'est pas un multiple de 10, ajoutez-les tous et s'il s'agit d'un multiple de 10, alors ce n'est pas un multiple de 10. Tout ce que vous avez à faire est de tirer le plus petit.
answerC.py
n=int(input())
a=[]
b=[]
for i in range(n):
s=int(input())
if s%10==0:
a.append(s)
else:
b.append(s)
b.sort()
if len(b)==0:
print(0)
else:
if sum(b)%10==0:
print(sum(a)+sum(b[1:]))
else:
print(sum(a)+sum(b))
Le problème B du dernier AGC041 était un problème assez similaire (typique ??). Tout d'abord, ** il est inévitable que répéter l'explosion honnêtement ne soit pas à temps pour le montant du calcul **, alors j'ai pensé à ce qui se passerait si l'explosion était répétée $ X $ fois. Supposons maintenant que $ X $ d'explosions se produisent $ m_i $ fois autour du $ i $ ème monstre. À ce moment, la force physique du $ i $ ème monstre est $ h_i-m_i \ fois A- (X-m_i) \ fois B = h_i-X \ fois B-m_i \ fois (AB) $, ce qui est un arbitraire 1 Si <= $ i $ <= N vaut 0 ou moins, vous pouvez vaincre tous les N monstres. Par conséquent, ** $ (h_i-X \ times B) / (A-B) $ arrondi est le nombre d'explosions centrées sur ce monstre nécessaire pour vaincre chaque monstre **. Si ce nombre de fois est calculé pour chaque monstre et que la valeur ajoutée est de X $ ou moins, on peut dire que tous les monstres peuvent être effacés par x explosions. De plus, il est clair d'après la contrainte que ** $ X $ est au plus de 10 $ ^ 9 $, et il est clair qu'il est clair que tous les monstres peuvent être effacés à la limite de $ X $ **, donc la valeur est calculée par dichotomie. Vous pouvez le demander. D'après ce qui précède, il a été constaté qu'il peut être calculé par un multiple constant (environ 10 fois) de O (n).
answerD.py
import math
n,a,b=map(int,input().split())
h=[int(input()) for i in range(n)]
def explode(x):
global n
c=0
for i in range(n):
if h[i]-x*b>0:
c+=math.ceil((h[i]-x*b)/(a-b))
return c<=x
l,r=1,10**9
while l+1<r:
k=(l+r)//2
if explode(k):
r=k
else:
l=k
print(l if explode(l) else r)
Recommended Posts