AtCoder ABC172 Ceci est un résumé des problèmes du concours AtCoder Beginner Contest 172 qui a eu lieu le samedi 27/06/2020, en commençant par le problème A et en tenant compte des considérations. Le premier semestre traite des problèmes jusqu'à ABCD. 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 PDF
Énoncé du problème L'entier $ a $ est entré. Sortez la valeur $ a + a ^ 2 + a ^ 3 $.
abc172a.py
a = int(input())
print(a + a**2 + a**3)
Énoncé du problème Compte tenu des chaînes $ S, T $. Lorsque vous remplacez $ S $ par $ T $ en répétant les opérations suivantes, recherchez le nombre minimum d'opérations. Opération: Sélectionnez le caractère $ 1 $ de $ S $ et réécrivez-le avec un autre caractère
J'ai vérifié avec l'instruction for si chaque caractère correspond à l'avant.
abc172b.py
s = input()
t = input()
count = 0
for i in range(len(s)):
if s[i] != t[i]:
count +=1
print(count)
Énoncé du problème Il y a deux pupitres A et B. Le bureau A a des livres $ N $ et le bureau B a des livres $ M $ empilés verticalement. Le livre $ (1 \ leq i \ leq N) $ actuellement chargé sur le bureau A à la $ i $ ème position à partir du haut prend $ A_i $ minutes à lire, et le bureau B est actuellement à la $ i $ ème position à partir du haut. Le livre $ (1 \ leq i \ leq M) $ chargé est requis pour lire $ B_i $. Considérez les actions suivantes. ・ Sélectionnez le bureau sur lequel reste le livre, lisez le livre sur le dessus du bureau et retirez-le du bureau. Combien de livres pouvez-vous lire lorsque vous répétez cette action pour que la durée totale du trajet ne dépasse pas $ K $? Ignorez le temps que cela prend à part la lecture d'un livre.
Pour le moment, je pensais que je le résoudrais de manière récursive, mais il était clair que cela prendrait du temps à s'exécuter, alors j'ai écrit le code avec une ingéniosité variée. Je voulais pouvoir écrire si simplement avec le code de référence de python dans l'explication.
abc172c.py
n, m, k = map(int, input().split())
a_list = list(map(int, input().split()))
b_list = list(map(int, input().split()))
new_a_list = [[0, 0]]
a_sum = 0
for i in range(0, n):
a_sum += a_list[i]
if a_sum <= k:
new_a_list.append([i + 1, a_sum])
else:
break
best = len(new_a_list) - 1
b_sum = 0
a_sum = new_a_list[-1][1]
a_count = new_a_list[-1][0]
flag = 1
for i in range(0, m):
b_sum += b_list[i]
while True:
if b_sum <= k - a_sum:
if best < i + 1 + a_count:
best = i + 1 + a_count
break
if a_count == 0:
flag = 0
break
a_count -= 1
a_sum = new_a_list[-(len(new_a_list) - a_count)][1]
if flag == 0:
break
print(best)
Énoncé du problème Soit $ f (X) $ le nombre de fractions positives de $ X $ pour l'entier positif $ X $. Étant donné un entier positif $ N $, trouvez $ \ sum_ {K = 1} ^ {N} K × f (K) $.
Manque accablant de compétences mathématiques (sueur) Je ne pouvais pas le résoudre, donc je pouvais le résoudre en mettant en œuvre ce qui était écrit dans l'explication.
abc172d.py
n = int(input())
total = 0
for j in range(1, n + 1):
x = j
y = n // x
total += y * (y + 1) * x // 2
print(total)
L'implémentation était simple mais je ne pouvais pas y penser, et la limite de temps d'exécution: 3 sec a été négligée en premier lieu. (Je ne pense pas que cela puisse être résolu même si cela n'est pas négligé)
C'est la fin du premier semestre. Merci d'avoir lu jusqu'à la fin du premier semestre.
La seconde moitié expliquera le problème EF, mais je ne pense pas pouvoir écrire un article à temps (sueur).
Recommended Posts