[PYTHON] AtCoder Je ne sais pas journal_4 ABC081B, 087B, 083B (de l'ABS)

introduction

[Que faire ensuite après vous être inscrit sur AtCoder - Si vous résolvez ce problème, vous pouvez vous battre suffisamment! Questions précédentes 10 questions ~](https://qiita.com/drken/items/fd4e5e3630d0f5859067#5-%E9%81%8E%E5%8E%BB%E5%95%8F%E7%B2%BE%E9 % 81% B8-10-% E5% 95% 8F) Puisqu'il n'y a pas eu de concours pendant un certain temps pendant les vacances de fin d'année et du Nouvel An, j'ai essayé le problème d'AtCoder Beginners Selection décrit dans cet article. Je léchais le problème B, mais c'était très difficile. Eh bien, je sentais que je pourrais me battre si je résolvais autant. De plus, j'écrivais un article en pensant que quelque chose n'allait pas, mais je l'ai corrigé parce que je faisais des fautes de frappe avec un grand élan. Je ne dirai rien parce que c'est tellement gênant, mais si quelqu'un l'a remarqué, je suis un débutant alors regardez-le avec des yeux chaleureux. Je suis désolé.

ABC081B - Shift only N entiers positifs A 1 </ sub>, ..., A N </ sub> sont écrits sur le tableau noir. Sunuke peut effectuer les opérations suivantes lorsque tous les nombres entiers écrits sur le tableau noir sont pairs.

--Remplacez tous les nombres entiers écrits sur le tableau noir par ceux divisés par deux.

Veuillez demander combien de fois vous pouvez effectuer l'opération au maximum.

Pensées

(1) Je me demande s'il n'y a pas d'autre choix que de tout diviser ... Je me demande si cela deviendra TLE ... ② Quoi qu'il en soit, organisons par ordre croissant pour réduire la quantité de calcul ③ Divisons la liste par la puissance de 2 sans la modifier. Selon le problème, il peut être divisé en virgules et ponctuation.

je l'ai écrit

n = input()
a = list(map(int, input().split()))
a.sort()
i = 0
#Boucle pour le moment
while i <= a[0]:
  for j in a:
    #Si ça ne casse pas, quittez la boucle intérieure
    if j % (2**(i+1)) != 0:
      print(i)
      break
  #Si tout dans la liste est cassé, ensuite
  else:
    i += 1
    #Ignorez la rupture de ↓!
    continue
  #Sortez de la boucle externe après la boucle interne
  break

C'est juste ce code, mais il m'a fallu quelques heures pour arriver ici. Il était très difficile de réaliser l'opération consistant à casser les deux boucles lorsqu'un numéro incassable arrivait. Le temps d'exécution était étonnamment court. Je ne savais pas que je pouvais changer le retrait de else ... Je n'ai pas dit non, donc c'est bien. À i <= a [0], j'ai décidé de le casser un jour comme la dernière fois et de le régler sur [0], mais je pense qu'il y a une meilleure façon ...

Réponse de l'homme fort (Tsuyobito)

――Je ne comprends pas du tout le sens

Je suis désolé de ne pas avoir étudié, mais je ne connaissais pas du tout la réponse du groupe avec le code le plus court. Il y a encore beaucoup de fonctions que je ne connais pas. Le point principal de ce journal est que je veux écrire du code que je ne pouvais pas atteindre au niveau actuel, alors j'ai sauté ici et j'ai cherché une réponse avec une structure similaire à la mienne. Je pourrais le chercher un jour.

--Combinez tout () et pour les instructions --Utiliser la notation d'inclusion de liste

Il y avait un tel moyen. Je vois……. Je n'ai pas tellement utilisé la fonction all, donc je ne pouvais pas du tout y penser. De plus, je connaissais la notation d'inclusion de liste, mais je ne suis pas douée pour cela. Je vais l'examiner correctement. C'était un problème très, très d'apprentissage. Uniquement sélectionné pour ABS ……. J'ai également lu l 'article de recherche linéaire fourni par l'article original.

ABC087B - Coins Vous avez des balles A de 500 yens, des balles B de 100 yens et des balles C de 50 yens. Combien de façons existe-t-il de choisir certaines de ces pièces et de faire en sorte que le montant total ne soit que de X Yen? Vous ne pouvez pas distinguer les pièces du même type. Il existe deux façons de choisir des pièces, qui se distinguent lorsque le nombre de pièces à choisir pour un certain type de pièce est différent.

Pensées

① Est-il trop compliqué de démonter le montant cible? ② Ensuite, il semble préférable de tout frapper avec les pièces que vous avez

je l'ai écrit

a = int(input())
b = int(input())
c = int(input())
x = int(input())
ans = 0
#Combinaison round-robin
for i in range(a+1):
  for j in range(b+1): 
    for k in range(c+1):
      total = (i * 500)+(j * 100)+(k * 50)
      if total == x:
        ans += 1
        break
print(ans)


Il a fallu environ une heure pour l'écrire aussi. Avec le recul, c'est si facile à expliquer ... C'est une boucle multiple, mais elle a une structure simple. C'est parce que j'étais simplement stupide, mais je ferai de mon mieux pour ne plus être stupide à partir de maintenant, donc ça va. Réponse de l'homme fort (Tsuyobito)

C'était à peu près pareil. Yay! Eh bien, c'est une question simple.

ABC083B - Some Sums Trouvez la somme des entiers entre 1 et N qui ont une somme de chaque chiffre en notation décimale A ou plus et B ou moins. Contrainte

Pensées

① S'il comporte jusqu'à 4 chiffres, ce n'est pas si gros, il semble donc que vous puissiez faire un tour ② Je me demande si je peux boucler à chaque chiffre comme avant ③ Ne pas boucler avec des chiffres inutiles pour ne pas augmenter la quantité de calcul Je viens de le faire! Je pensais que j'étais en forme. Je suis un peu seul plus tard.

je l'ai écrit

n, a, b = map(int, input().split())
ans = 0
#Ne pas boucler dans les dizaines à des milliers selon la valeur de n
ir = 1 if n < 1000 else 10
jr = 1 if n < 100 else 10
kr = 1 if n < 10 else 10
#Combinaison round-robin
for i in range(ir):
  for j in range(jr):
    for k in range(kr):
      for l in range(10):
        #Total de chiffres
        s = i + j + k + l
        if s >= a and s <= b:
          #Prix total
          t = 1000 * i + 100 * j + 10 * k + l 
          if t <= n:
            ans += t
print(ans)

WASHINGTON. Puisqu'il n'y avait que deux cas, j'ai pensé qu'il y avait une exception négligée et l'ai correctement confirmée, mais j'ai oublié l'heure de n = 10 4 </ sup>. Bien sûr, j'ai fait beaucoup d'autres erreurs dans le processus, et je me demandais si je devais faire une si petite erreur, mais je garderai cela comme un commandement. N'oubliez pas les exceptions que vous avez faites.

J'ai écrit _2

n, a, b = map(int, input().split())
ans = 0
ir = 1 if n < 1000 else 10
jr = 1 if n < 100 else 10
kr = 1 if n < 10 else 10
for i in range(ir):
  for j in range(jr):
    for k in range(kr):
      for l in range(10):
        s = i + j + k + l
        if s >= a and s <= b:
          t = 1000 * i + 100 * j + 10 * k + l 
          if t <= n:
            ans += t
#Je vais prendre l'exception
if n == 10000 and a ==1:
            ans += n            
print(ans)

Lorsque vous faites une exception, vous souhaiterez peut-être écrire le code de l'exception afin de ne pas l'oublier. Réponse de l'homme fort (Tsuyobito)

Chaîne de caractères i Chacun d'eux est converti en une valeur numérique avec int et la somme est prise. Je vois je vois……? !! Je ne pouvais pas du tout y penser. J'utilisais la fonction de carte uniquement lors de la saisie ... C'est incroyable que tout le monde l'ait inventé. Cependant, il existe certaines normes, et je me demande si tout le monde a appris de cette façon. Je ferai de mon mieux aussi. Quand je lis l'explication, cela semble être un problème assez courant. Je peux penser à un moyen d'en ajouter trop que j'ai continué à diviser par 10, je vois, je vois. Vous devez vous approprier les idées de ces autres personnes et en proposer vous-même des plus difficiles ... Je veux m'habituer à ces pierres standards le plus tôt possible. De plus, il semble que a <= s <= b était bon. Je pensais pouvoir le faire, mais je n'y croyais pas. Croyez.

J'ai été surpris que cela prenne beaucoup de temps que le problème B que j'avais résolu plusieurs fois. [^ 1] En plus, tous les trois ont beaucoup appris. C'est comme si c'était le problème du choix. Nous allons également contester les problèmes d'APA qui subsistent. Je veux l'ajouter après l'avoir examiné correctement ....

[^ 1]: N'est-ce pas simplement parce qu'il a été résolu à une aube inutile? La théorie a émergé

Recommended Posts

AtCoder Je ne sais pas journal_4 ABC081B, 087B, 083B (de l'ABS)
AtCoder Je ne sais pas journal_2 ABC148E
AtCoder Je ne connais pas le journal_1 ABC148D
AtCoder Je ne connais pas le journal_3 ABC149C, D
Je ne connais pas l'erreur de valeur
[Python] Commencer le journal à partir d'aujourd'hui Atcorder ABC058-B