Examen du concours AtCoder pour débutants 161, jusqu'à la question E (Python)

Ceci est un article de synthèse pour les débutants des professionnels de la compétition.

La solution que j'écris ici est écrite en regardant les commentaires et les soumissions d'autres personnes. Ce n'est peut-être pas ce que vous avez réellement soumis.

A - ABC Swap

C'est un problème de remplacer le contenu des trois boîtes par une opération fixe. Puisque la position de l'opération d'échange est fixée depuis le début, changez simplement l'ordre de x, y, z en z, x, y et en sortie.

x, y, z = map(int, input().split())
print(z, x, y)

B - Popular Vote

C'est un problème de savoir s'il y a M produits ou plus qui ont obtenu un certain nombre de voix parmi N types de produits.

Nous avons trié le nombre de votes donnés et vérifié si le produit Mth remplissait les conditions. Je suis passé par là.

N, M = map(int, input().split())
A = list(map(int, input().split()))
A.sort(reverse = True)
if A[M-1] >= sum(A) / (4 * M):
  print('Yes')
else: print('No')

C - Replacing Integer La question est de savoir quelle sera la valeur minimale si vous continuez à soustraire K du N. donné.

Le dernier nombre restant après soustraction du nombre donné ... équivaut au calcul pour trouver le terme excédentaire. Si vous en soustrayez un de plus, ce sera la valeur obtenue en soustrayant K du terme de surplus (moins).

Je l'ai implémenté avec le code suivant.

N, K = map(int, input().split())
print(min(N%K, K-N%K))

D - Lunlun Number

C'est un problème de trouver le nombre Kème qui satisfait la condition du nombre d'exécutions.

À première vue, les conditions semblent simples, mais j'ai abandonné car je ne savais pas comment trouver efficacement le nombre K-ème.

J'ai vu le commentaire. Dans ce problème, vous pouvez le trouver à grande vitesse en ajoutant un nombre qui satisfait une autre condition à l'extrémité droite du nombre utilisé une fois. Le commentaire a fait cela en utilisant des files d'attente.

Mettez d'abord un nombre de 1 à 9 dans la file d'attente. Retirez l'extrémité gauche et définissez sa valeur sur $ x $. Soit $ r $ le chiffre un de $ x $. Si $ r $ vaut "0", calculez $ 10x et 10x + 1 $ et remettez-les en file d'attente. De même, si $ r $ vaut "1 ~ 8", alors $ 10x + (r-1), 10x + r, 10x + (r + 1) $, si r est "9", alors $ 10x --1, 10x $ est calculé, puis à nouveau. À la file d'attente.

Ceci est répété et la valeur prélevée au kième temps est le nombre requis.

J'ai essayé de le mettre en œuvre tel quel.

K = int(input())
Q = [i for i in range(1, 10)]
for _ in range(K):
  x = Q.pop(0)
  r = x%10
  if r != 0: Q.append(x*10 + r - 1)
  Q.append(x*10 + r)
  if r != 9: Q.append(x*10 + r + 1)
print(x)

C'est TLE. La vitesse de pop () semble lente. Je ne pense pas avoir besoin de le retirer, alors je vais le garder sous forme de tableau et le tourner avec pour.

K = int(input())
Q = [i for i in range(1, 10)]
k = 0
for q in Q:
  if k >= K:
    break
  r = q%10
  if r != 0:
    Q.append(q*10 + r - 1)
    k += 1
  Q.append(q*10 + r)
  k += 1
  if r != 9:
    Q.append(q*10 + r + 1)
    k += 1
print(Q[K-1])

Je suis passé par là.

Postscript

J'ai été souligné dans les commentaires. Utilisez correctement la bibliothèque pour gérer les files d'attente.

En python, vous pouvez gérer les files d'attente en utilisant la classe collections.deque (). Il existe des fonctions telles que ʻappend () , ʻappendleft (), pop (), popleft ().

import collections

K = int(input())
Q = collections.deque([i for i in range(1, 10)])
for _ in range(K):
  x = Q.popleft()
  r = x%10
  if r != 0: Q.append(x*10 + r - 1)
  Q.append(x*10 + r)
  if r != 9: Q.append(x*10 + r + 1)
print(x)

E - Yutori

Lorsque vous décidez quels jours travailler et quels jours travailler selon certaines règles, c'est une question de toujours répondre quel jour travailler.

J'ai abandonné et j'ai vu le commentaire.

Tout d'abord, si vous pouvez vous permettre le nombre de jours que vous pouvez travailler, ou si vous n'avez pas assez de jours, vous serez absent sans condition.

Alors, considérons le cas où le nombre de jours ouvrables est rempli jusqu'à la dernière minute. Tout d'abord, créez un tableau R qui compte les jours pendant lesquels vous pouvez travailler dans l'ordre du bon côté. Ce tableau contient l'information "Le $ x $ ème jour ouvrable est avant $ R [x] $". De même, dans le cas du tableau L qui compte les jours ouvrables dans l'ordre à partir de l'extrémité gauche, les informations selon lesquelles "le jour ouvrable $ x $ est après $ L [x] $" sont incluses. Par conséquent, on peut dire que le jour ouvrable est toujours lorsque $ L [x] $ et $ R [x] $ correspondent.

Le code suivant implémente cela. Je suis passé par là.

N, K, C = map(int, input().split())
S = input()

L = []
R = []
holiday = 0

for i in range(N):
  if holiday:
    holiday -= 1
  elif S[i] == 'o':
    L.append(i)
    holiday = C
holiday = 0
for i in range(N-1, -1, -1):
  if holiday:
    holiday -= 1
  elif S[i] == 'o':
    R.append(i)
    holiday = C
R = R[::-1]
if len(L) == K:
  for l, r in zip(L, R):
    if l == r: print(l+1)

C'est tout pour cet article.

Recommended Posts

Examen du concours AtCoder pour débutants 159, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 164, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 162, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 154, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 153, jusqu'à la question E (Python)
Examen de AtCoder Beginner Contest 160, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 167, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 157, jusqu'à la question E (Python)
Examen du concours AtCoder pour débutants 161, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 155, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 156, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 166, jusqu'à la question E (Python)
Examen du concours AtCoder Beginner Contest 165, jusqu'à la question E (Python)
atcoder Review of Panasonic Programming Contest 2020, jusqu'à la question E (Python)
Examen de atcoder ABC158, jusqu'à la question E (Python)
AtCoder Beginner Contest 072 Revue des questions précédentes
AtCoder Beginner Contest 085 Revue des questions précédentes
AtCoder Beginner Contest 062 Revue des questions précédentes
AtCoder Beginner Contest 113 Revue des questions précédentes
AtCoder Beginner Contest 074 Revue des questions précédentes
AtCoder Beginner Contest 127 Revue des questions précédentes
AtCoder Beginner Contest 151 Revue des questions précédentes
AtCoder Beginner Contest 075 Revue des questions précédentes
AtCoder Beginner Contest 054 Revue des questions précédentes
AtCoder Beginner Contest 110 Revue des questions précédentes
AtCoder Beginner Contest 117 Revue des questions précédentes
AtCoder Beginner Contest 070 Revue des questions précédentes
AtCoder Beginner Contest 105 Revue des questions précédentes
AtCoder Beginner Contest 112 Revue des questions précédentes
AtCoder Beginner Contest 076 Revue des questions précédentes
AtCoder Beginner Contest 089 Revue des questions précédentes
AtCoder Beginner Contest 069 Revue des questions précédentes
AtCoder Beginner Contest 079 Revue des questions précédentes
AtCoder Beginner Contest 056 Revue des questions précédentes
AtCoder Beginner Contest 087 Revue des questions précédentes
AtCoder Beginner Contest 067 Revue des questions précédentes
AtCoder Beginner Contest 093 Revue des questions précédentes
AtCoder Beginner Contest 123 Revue des questions précédentes
AtCoder Beginner Contest 078 Revue des questions précédentes
AtCoder Beginner Contest 081 Revue des questions précédentes
AtCoder Beginner Contest 047 Revue des questions précédentes
AtCoder Beginner Contest 060 Revue des questions précédentes
AtCoder Beginner Contest 104 Revue des questions précédentes
AtCoder Beginner Contest 121 Revue des questions précédentes
AtCoder Beginner Contest 126 Revue des questions précédentes
AtCoder Beginner Contest 090 Revue des questions précédentes
AtCoder Beginner Contest 103 Revue des questions précédentes
AtCoder Beginner Contest 061 Revue des questions précédentes
AtCoder Beginner Contest 059 Revue des questions précédentes
AtCoder Beginner Contest 044 Revue des questions précédentes
AtCoder Beginner Contest 083 Revue des questions précédentes
AtCoder Beginner Contest 048 Revue des questions précédentes
AtCoder Beginner Contest 124 Revue des questions précédentes
AtCoder Beginner Contest 116 Revue des questions précédentes
AtCoder Beginner Contest 097 Revue des questions précédentes
AtCoder Beginner Contest 088 Revue des questions précédentes
AtCoder Beginner Contest 092 Revue des questions précédentes
AtCoder Beginner Contest 099 Revue des questions précédentes
AtCoder Beginner Contest 065 Revue des questions précédentes
AtCoder Beginner Contest 053 Revue des questions précédentes
AtCoder Beginner Contest 063 Revue des questions précédentes