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à.
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