Réponse à la sélection des débutants d'AtCoder par Python3

Dans cet article, les questions 10 + 1 d'AtCoder Beginners Selection recevront une réponse en Python (3.8).

** Qu'est-ce que la sélection AtCoder pour débutants **

AtCoder est un service de programmation de compétition originaire du Japon. Pour plus d'informations, consultez les articles de @ drken et @ e869120

S'il te plait regarde. Surtout @drken

―― Que faire ensuite après vous être inscrit sur AtCoder ~ Vous pouvez vous battre suffisamment si vous résolvez ce problème! Sélection de questions précédentes 10 questions ~

Les 10 dernières questions résumées ci-dessus ont ensuite été adoptées par la formule AtCoder sous la forme AtCoder Beginners Selection en tant qu'exercices pour les débutants.

Les références

Il existe déjà des réponses Python pour AtCoder Beginners Selection, mais cet article a été particulièrement utile. Merci beaucoup. Dans cet article, je vais vous donner une réponse qui vous fait du bien. Si vous les comparez, vous pouvez voir qu'ils ont été améliorés en détail.

** Qu'est-ce qu'un bon code **

En passant, je pense que la "bonté" du code dépend du but et de la situation et n'est pas un concept qui peut être clairement défini, mais principalement

Il y a deux directions, et je pense qu'il y a souvent un compromis entre ces deux directions. Ce compromis est également apparu au moment de la sélection du langage avant d'écrire le code, et comme vous pouvez le voir en comparant la réponse en Python comme cet article avec la réponse en C ++ par drken, il est écrit en Python par rapport au C ++. Le choix semble être en mesure de donner la priorité à la lisibilité au détriment de l'effort de calcul.

La concision est souvent mentionnée comme la "bonté" du code, mais à moins qu'il ne s'agisse de code jetable, la concision n'a de valeur que lorsqu'elle contribue à la lisibilité, et si elle est moins lisible, il vaut mieux ne pas raccourcir le code. Je pense personnellement.

répondre

  1. PracticeA - Welcome to AtCoder
a = int(input())
b, c = map(int, input().split())
s = input()

print(a+b+c, s)
  1. ABC086A - Product
a, b = map(int, input().split())
print("Odd" if a%2 and b%2 else "Even")

--'A% 2 et b% 2peuvent être(a * b)% 2` selon l'énoncé du problème

  1. ABC081A - Placing Marbles
print(input().count("1"))
  1. ABC081B - Shift only
_ = input()
A = [*map(int, input().split())]

count = 0
while not any(a%2 for a in A):
    A = [a/2 for a in A]
    count += 1
print(count)

―― ʻa% 2 peut indiquer si ʻa est impair, et ʻany (a% 2 pour a dans A) peut indiquer bool si ʻA contient un nombre impair. Les nombres autres que 0 sont interprétés comme «True», donc «any» peut être «sum», et pour une raison quelconque «sum» était plus rapide, mais pour plus de lisibilité, je l'ai fait «any». «Résolvons-le selon l'énoncé du problème. Il existe également une méthode pour compter le nombre de fois que chaque nombre est divisé par 2 en lisant combien de 0 se poursuivent vers la droite en notation binaire.

  1. ABC087B - Coins
import itertools as it

A, B, C, X = map(int, [input() for _ in range(4)])

count = 0
for a, b, c in it.product(range(A+1), range(B+1), range(C+1)):
  if 500*a + 100*b + 50*c == X:
    count += 1
print(count)

--Le montant du calcul de la recherche complète est $ O (50 ^ 3) $, et même s'il est surestimé comme $ O (100 ^ 3) = O (10 ^ 6) $, il s'agit d'une ligne directrice pour la limite supérieure du montant du calcul du temps $ O (10 ^ 8) ) C'est bien en dessous de $, donc une recherche complète est acceptable

  1. ABC083B - Some Sums
N, A, B = map(int, input().split())
print(sum(i for i in range(N+1) if A <= sum(map(int,str(i))) <= B))

--Pour ʻi` de "

  1. ABC088B - Card Game for Two
_ = input()
a = sorted(map(int,input().split()), reverse=True)
print(sum(a[::2]) - sum(a[1::2]))

--Trier toutes les cartes et soustraire la somme impaire de la somme paire

  1. ABC085B - Kagami Mochi
N = int(input())
print(len(set(input() for _ in range(N))))
  1. ABC085C - Otoshidama
N, Y = map(int, input().split())
for n_10k in range(N+1):
  for n_5k in range(N-n_10k+1):
    n_1k = N - n_10k - n_5k
    if n_10k*10000 + n_5k*5000 + n_1k*1000 == Y:
    	print(n_10k, n_5k, n_1k)
    	exit()
print(-1, -1, -1)

-- n_10k, n_5k, n_1k représentent respectivement le nombre de billets de 10 000 yens, de 5 000 yens et de 1 000 yens. «Grâce à la contrainte que la valeur totale de ces trois variables est« N », la recherche peut être effectivement effectuée avec deux variables. Étant donné que le montant du calcul de la recherche complète est $ O (2000 ^ 2) = O (8 \ fois 10 ^ 6) $, ce qui est inférieur à la valeur indicative de la limite supérieure du montant du calcul de $ O (10 ^ 8) $, la recherche complète est correcte. --Quand vous voulez terminer une boucle imbriquée for au milieu, si vous essayez de la casser avec break, ce sera un peu de code délicat, donc je pense que vous pouvez terminer le programme avec ʻexit ()` comme ça.

9. ABC049C - Daytime Dream

S = input()
while S:
  for x in ["dream","dreamer","erase","eraser"]:
    if S.endswith(x):
      S = S[:-len(x)]
      break
  else:
    print("NO")
    break
else:
  print("YES")

――Quel préfixe n'est pas déterminé de manière unique, mais quel suffixe est déterminé de manière unique --for ... else ...etwhile ... else ...'ʻelse fonctionne quand pour et while se terminent normalement et se terminent anormalement par break`. Ne fonctionne pas si

  1. ABC086C - Traveling
t0, x0, y0 = 0, 0, 0
for _ in range(int(input())):
  t, x, y = map(int, input().split())
  margin = (t-t0) - abs(x-x0) - abs(y-y0)
  if margin < 0 or margin%2 != 0:
    print("No")
    break
  t0, x0, y0 = t, x, y
else:
  print("Yes")

«Tout d'abord, si« margin »est négatif, vous ne pouvez pas atteindre le point cible. De plus, comme il n'y a pas d'option pour arrêter, si «margin» est impair, vous ne pouvez pas atteindre le point cible.

Recommended Posts

Réponse à la sélection des débutants d'AtCoder par Python3
[Exemple de réponse (python3)] ABS (AtCoder Beginners Selection) de atcoder
Mémorandum de sélection pour débutants AtCoder
3 raisons pour lesquelles les débutants en programmation devraient commencer avec Python
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
Résumé de l'apprentissage automatique par les débutants de Python
Expérience de sélection des débutants AtCoder (2e fois)
Mémo d'automatisation de saisie par Python débutant
# 2 Les débutants en Python défient AtCoder! ABC085C --Otoshidama
les débutants en python ont essayé de le découvrir
atCoder 173 Python
Réintroduction aux décorateurs Python ~ Apprenons les décorateurs par type ~
Fonction pour enregistrer les images par date [python3]
10 erreurs Python communes aux débutants
Livres recommandés par 3 types liés à Python
Ensemble d'entrées standard Atcoder pour les débutants (python)
Un manuel pour les débutants réalisé par des débutants Python
[Python] Essayez de créer vous-même un programme de tri. (Tri sélectif, tri par insertion, tri par bulle)
[python] Comment afficher les éléments de la liste côte à côte
Le moyen le plus rapide pour les débutants de maîtriser Python
Mis à jour vers Python 2.7.9
Une introduction à la programmation orientée objet pour les débutants par les débutants
Python pour les super débutants Super débutants Python # Facile à éliminer
La première application Web créée par des débutants en Python
AtCoder ABC 174 Python
Un débutant en Python a essayé de coder une boisson énergisante
Mémo n ° 3 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Entrée où les débutants en Python font de leur mieux pour frapper petit à petit 100 processus de langage
Mémo n ° 1 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Essayez de calculer RPN avec Python (pour les débutants)
Comment effacer les caractères générés par Python
Mémo n ° 2 que les débutants Python lisent "Explication détaillée de la grammaire Python"
[Python] Comment trier les instances par variables d'instance
Je souhaite vendre les produits que j'ai listés par python scraping Mercari
Mémo n ° 7 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Les débutants pratiquent Python
J'ai essayé d'implémenter le tri sélectif en python
Introduction à la programmation (Python) TA Tendency pour les débutants
Mémo n ° 6 pour les débutants Python à lire "Explication détaillée de la grammaire Python"
Comment rendre le Python des débutants plus rapide [numpy]
Note du débutant Python
AtCoder ABC 175 Python
Exécutez Power Query en passant des arguments à Python
Mémo n ° 5 que les débutants Python lisent "Explication détaillée de la grammaire Python"
[Python] Suite - Convertir le texte PDF en CSV page par page
"Backport" vers python 2
[Chapitre 8] Problème de fin de chapitre de l'économie métrique (Yukikaku), réponse de python
[Keras] Mémo personnel pour classer les images par dossier [Python]
[Traitement du langage 100 coups 2020] Résumé des exemples de réponses par Python
[Pour les débutants] Comment utiliser la commande say avec python!
Même les débutants veulent dire "Je comprends parfaitement Python"
Python que je voudrais recommander aux débutants en programmation
Comment convertir le type Python # pour les super débutants de Python: str
[Python] Essayez de lire la bonne réponse au problème FizzBuzz
Liste des articles liés à l'optimisation par Python vers Docker
[Pour les débutants] Comment étudier le test d'analyse de données Python3
[Python] Convertir le texte PDF en CSV pour chaque page (2/24 postscript)
Lisez le fichier xml en vous référant au didacticiel Python