AtCoder ABC182 Ceci est un résumé des problèmes de AtCoderBeginnerContest182 qui s'est tenu le 08/11/2020 (dimanche), à partir du problème A, en tenant compte de la considération. Le problème est cité, mais veuillez consulter la page du concours pour plus de détails. Cliquez ici pour la page du concours Commentaire officiel
Énoncé du problème Vous disposez d'un SNS appelé twiblr. Avec twiblr, vous pouvez augmenter le nombre de followers tant que le nombre de followers ne dépasse pas 2 $ × ($ followers $) + 100 $. Votre nombre actuel d'abonnés est de $ A $ et votre nombre actuel d'abonnés est de $ B $. Combien de followers puis-je avoir?
abc182a.py
a, b = map(int, input().split())
print(2*a+100-b)
Énoncé du problème Étant donné la séquence $ A (A_1, A_2, A_3,…, A_N) $. Définissez le degré GCD de l'entier positif $ k $ comme le nombre de $ A_1, A_2, A_3,…, A_N $ qui est divisible par $ k $. Trouvez l'un des nombres entiers supérieurs ou égaux à $ 2 $ qui maximise le degré GCD. S'il y en a plusieurs avec le degré GCD maximum, peu importe lequel est émis.
Degré GCD de $ p $ $ \ geq p × k $ Degré GCD ($ p $ est un nombre premier, $ k $ est un nombre naturel) Par conséquent, je l'ai implémenté avec l'intention d'examiner uniquement les nombres premiers, mais ce n'était pas nécessaire car $ N $ était petit. De plus, j'ai écrit diverses conditions pour sortir de la boucle, mais je n'avais pas besoin de cela dans le concours pour résoudre rapidement.
abc182b.py
n = int(input())
a_list = list(map(int, input().split()))
sosuu_list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]
max_a = max(a_list)
max_count = 0
ans = 0
for i in sosuu_list:
if max_a < i:
break
count = 0
for a in a_list:
if a % i == 0:
count += 1
if count > max_count:
max_count = count
ans = i
if max_count == len(a_list):
break
print(ans)
Énoncé du problème Chaque chiffre reçoit un entier positif $ N $ tel que $ 0 $ n'apparaît pas. Soit $ k $ le nombre de chiffres dans $ N $. Je veux créer un multiple de 3 $ en effaçant 0 $ ou plus et moins de $ k $ dans les chiffres de $ N $ et en combinant les chiffres restants dans le même ordre. Déterminez si vous pouvez faire un multiple de 3 $ $, et si oui, trouvez le nombre minimum de chiffres à effacer.
Ce n'est pas un très bon code, mais c'est exactement ce que j'ai soumis. Classez soigneusement les cas.
abc182c.py
n = input()
n_list = []
for i in range(len(n)):
k = int(n[i])
k = k % 3
if k == 2:
n_list.append(-1)
else:
n_list.append(k)
if sum(n_list) % 3 == 0:
print(0)
else:
t = sum(n_list) % 3
if t == 2:
p_one = n_list.count(1)
n_one = n_list.count(-1)
if n_one > 0 and len(n_list) - 1 > 0:
print(1)
elif p_one > 1 and len(n_list) - 2 > 0:
print(2)
else:
print(-1)
else:
p_one = n_list.count(1)
n_one = n_list.count(-1)
if p_one > 0 and len(n_list) - 1 > 0:
print(1)
elif n_one > 1 and len(n_list) - 2 > 0:
print(2)
else:
print(-1)
Énoncé du problème Compte tenu de la séquence $ A_1, A_2, A_3,…, A_N $. Cette séquence de nombres peut contenir des éléments négatifs. Le robot situé à la coordonnée $ 0 $ sur la droite numérique effectue les opérations suivantes dans l'ordre. ・ Avancez $ A_1 $ dans le sens positif. ・ Avancez $ A_1 $ dans le sens positif et $ A_2 $ dans le sens positif. ・ Avancez $ A_1 $ dans le sens positif, avancez $ A_2 $ dans le sens positif et avancez $ A_3 $ dans le sens positif. ⋮ ・ Avancez $ A_1 $ dans le sens positif, avancez $ A_2 $ dans le sens positif, avancez $ A_3 $ dans le sens positif, ..., avancez $ A_N $ dans le sens positif. Trouvez la valeur maximale des coordonnées du robot du début à la fin de l'opération.
Je pense que cela a été bien résolu. TLE a été évité en permettant de trouver le moment où la direction la plus positive peut être atteinte à chaque étape avec un seul calcul.
abc182d.py
n = int(input())
a_list = list(map(int, input().split()))
b_list = [0] * n
b_list[0] = a_list[0]
c_list = [0] * (n + 1)
c_list[1] = b_list[0]
for i in range(1, n):
b_list[i] = b_list[i - 1] + a_list[i]
c_list[i + 1] = c_list[i] + b_list[i]
max_x = 0
max_b = b_list[0]
x = 0
for i in range(n):
x = c_list[i]
if max_b < b_list[i]:
max_b = b_list[i]
x += max_b
if x > max_x:
max_x = x
print(max_x)
J'ai pu résoudre le problème D à un bon rythme cette fois aussi, mais j'étais coincé avec le problème E. Il est temps de résoudre les problèmes du passé pour pouvoir terminer 5.
Merci d'avoir lu jusqu'à la fin.
Recommended Posts