Nous avons participé à AtCoder Beginner Contest 171. C'est la première fois que je participe à un concours de programmation.
3 Complet, le problème D a été bloqué par le mur du temps d'exécution, E a également été implémenté, mais TLE est embarrassant avec un code indescriptible lors de la révision maintenant ...
A - Alphabet
#Alphabet
S = input()
if S in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
print('A')
else:
print('a')
Problème de retour des majuscules ou des minuscules pour la saisie d'une lettre de l'alphabet. J'aurais aimé pouvoir juger d'après le code ASCII, etc., mais je n'avais jamais implémenté une telle chose en Python, donc comme vous pouvez le voir, j'ai répondu de force.
B - Mix Juice
#Mix Juice
N, K = list(map(int, input().split()))
P = sorted(map(int, input().split()))
print(sum(P[0:K]))
Le prix de chacun des N types de fruits est indiqué, et le prix le plus bas lors de l'achat de l'un des K types de fruits est calculé. ↓ Triez N types de prix et répondez comme la valeur totale de K du plus petit.
C - One Quadrillion and One Dalmatians
#One Quadrillion and One Dalmatians
alphabet = list('abcdefghijklmnopqrstuvwxyz')
N = int(input())-1
def shin26(N):
if(int(N/26)!=0):
return(shin26(int(N/26)-1)+alphabet[N%26])
return alphabet[N%26]
print(shin26(N))
Une question qui renvoie A à Z, AA à AZ, BA ~ ... pour une entrée comme le numéro de colonne EXCEL (la réponse est inférieure). J'ai changé la fonction récursive pour trouver le nombre N-aire afin qu'il renvoie les chaînes de caractères a à z. Ici aussi, en créant une liste de a à z, l'alphabet peut être obtenu en donnant l'adresse de la liste.
Après cela, j'ai découvert l'opérateur de division de troncature "//" sur Python. (Il n'était pas nécessaire de combiner int et opérateur de division)
D - Replacing
###Échec###
#Replacing
import numpy as np
N = int(input())
A = np.array(list(map(int, input().split())))
Q = int(input())
for i in range(Q):
B, C = list(map(int, input().split()))
CC = A==B
NC = CC==False
A = A*(NC) + C*CC
print(A.sum())
D Le problème n'a pas pu être résolu à temps. Étant donné un tableau A, le problème du remplacement répété de B par C et de la sortie de la valeur totale de A à chaque fois. Au début, je l'ai remplacé honnêtement, mais il a coulé parce que le temps d'exécution était dépassé.
Il m'a informé que si je connaissais le nombre de Bs dans le tableau immédiatement après la fin, je serais en mesure de trouver la différence par rapport à la valeur totale précédente (Merci!)
###Échec###
#Replacing
import numpy as np
N = int(input())
A = np.array(list(map(int, input().split())))
Q = int(input())
u, count = np.unique(A,return_counts=True)
asum = A.sum()
for i in range(Q):
B, C = list(map(int, input().split()))
if B in u:
posB = np.where(u==B)
asum += int(count[posB]) * (C-B)
# print(u)
# print(count)
if not (C in u):
u[posB] = C
else :
posC = np.where(u==C)
count[posC] += count[posB]
u = np.delete(u,posB)
count = np.delete(count,posB)
print(asum)
Convertissez le tableau A en un tableau avec un nombre u d'un certain nombre. Lors du passage de B à C, le nombre a été changé, et s'il pouvait être intégré, la politique était d'intégrer (la sortie est calculée à partir de la différence comme décrit ci-dessus), mais cela a également coulé.
** La recherche de liste est lente **
Je savais……. Il est lent à activer les instructions sur Python (généralement, s'il y a un calcul à tourner pour les instructions, remplacez-le par une opération de matrice et tournez-le avec numpy). En outre, les connaissances des utilisateurs C ++ ont également subi un dépassement de temps de la même manière.
Un plan pour créer un arbre de conversion B → C et l'appliquer à la fin ↓ Impossible car une sortie est requise pour chaque conversion.
Après tout, jetez un œil au commentaire "Puisque l'entier d'entrée est au plus de 10 $ ^ 5 $, créez un tableau de 10 $ ^ 5 $ et entrez le numéro de ce nombre dans l'adresse de l'adresse." Cela ne nécessite certainement pas de recherche!
Donc, j'ai eu AC avec la réponse suivante.
#Replacing
import numpy as np
N = int(input())
A = np.array(list(map(int, input().split())))
Q = int(input())
u, count = np.unique(A,return_counts=True)
L = np.zeros(10**5,int)
for i in range(len(u)):
L[u[i]-1] = count[i]
asum = A.sum()
for i in range(Q):
B, C = list(map(int, input().split()))
asum += L[B-1] * (C-B)
L[C-1] += L[B-1]
L[B-1] = 0
print(asum)
E - Red Scarf
###Échec###
#Red Scarf
import numpy as np
N = int(input())
A = np.array(list(map(int, input().split())))
output = ''
def binary(A, p):
if not np.all(A==0) :
return binary( (A-A%2)/2 , p+1 ) + ((A%2).sum())%2 * 2**p
return ((A%2).sum())%2 * 2**p
for i in range(N):
ken = (np.delete(A,i))
output += str(int(binary(ken,0)))
if i != N-1:
output += ' '
print(output)
Je ne connaissais pas xor, donc je l'ai jugé par binaire. Fin
J'ai fait cela parce que j'ai compris que cela pouvait être jugé par le nombre de 1 dans chaque chiffre du nombre binaire, mais TLE. J'ai eu un AC ci-dessous avec le conseil d'une connaissance que je pourrais prendre xor de tous les nombres, puis prendre mon propre numéro et xor.
#Red Scarf
N = int(input())
A = list(map(int, input().split()))
output = list()
axor = A[0]
for i in range(1,N):
axor ^= A[i]
for i in range(N):
output.append(axor^A[i])
print(*output)
J'ai ajouté un peu de connaissances mémorisées telles que la méthode d'ajout.
Le problème F est intact. Au prochain ABC, nous travaillons dur pour résoudre les questions du passé afin de viser un plus grand nombre de réponses complètes. J'aimerais que cela se produise dans l'article. .. ..
Recommended Posts