Résolvez 100 questions passées que les débutants et les intermédiaires devraient résoudre en Python. L'objectif est de devenir bleu clair lorsque vous avez terminé de tout résoudre.
Cet article s'intitule "005 --009 All Search: All Enumeration to Reduce the Number of Streets by Ingenuity".
[006. Sumitomo Mitsui Trust Bank Programming Contest 2019 D - Lucky PIN] a été un peu difficile. 007 et 009 peuvent être difficiles si vous n'avez pas de vecteur.
A, B, C, X, Y = map(int, input().split())
answer_1 = A * X + B * Y #Lors de tout achat en A et B
answer_2 = C * 2 * max(X, Y) #Si vous achetez tout en C
# answer_3:Une première,Lors de l'achat de B, puis en complétant le reste avec C
# answer_4:Achetez d'abord C, puis le reste A,En complétant avec B
if X > Y:
answer_3 = A * Y + B * Y + C * (X - Y) * 2
answer_4 = A * (X - Y) + C * Y * 2
else:
answer_3 = A * X + B * X + C * (Y - X) * 2
answer_4 = B * (Y - X) + C * X * 2
answer = min(answer_1, answer_2, answer_3, answer_4)
print(answer)
Pour acheter au prix le moins cher, il suffit d'essayer les 4 façons suivantes.
La réponse est de trouver la valeur minimale après avoir calculé ces quatre montants.
import itertools
def find_index(l, x): #Dans l'index de fonction intégré, s'il n'est pas trouvé, une erreur se produira.-Fixé pour retourner 1
if x in l:
return l.index(x)
else:
return -1
if __name__ == "__main__":
N = int(input())
S = [int(c) for c in input()]
table = list(range(10))
count = 0
for p in itertools.product(table, repeat=3): #Autoriser la duplication 1~Disposer trois nombres de 9
target = list(p)
s1_index = find_index(S, target[0])
if s1_index == -1:
continue
s1 = S[s1_index+1:]
s2_index = find_index(s1, target[1])
if s2_index == -1:
continue
s2 = s1[s2_index+1:]
s3_index = find_index(s2, target[2])
if s3_index == -1:
continue
count += 1
print(count)
Cette réponse n'est pas bonne.
Si vous recherchez principalement la chaîne de caractères S, la longueur maximale de S est de 30000, et si vous essayez toutes les méthodes pour en sélectionner trois à partir d'ici, l'ordre sera d'environ 10 ** 12, donc je vais penser à une méthode différente.
Si vous réfléchissez à la façon d'autoriser les nombres en double de 0 à 9 et de sélectionner 3 au lieu de la chaîne de caractères S comme corps principal, ce sera de l'ordre de 10 ** 3, donc je pense que je peux y aller si je pense à cela comme au corps principal.
La politique est
itertools.product
est.
import itertools
n = int(input())
dots = [tuple(map(int, input().split())) for _ in range(n) ]
dots_set = set(dots)
#Pensez à un carré ABCD
max_area = 0
for A, B in itertools.combinations(dots, 2):
Ax, Ay = A
Bx, By = B
Cx, Cy = Bx - (By - Ay), By + (Bx - Ax)
Dx, Dy = Ax - (By - Ay), Ay + (Bx - Ax)
if (Cx, Cy) in dots_set and (Dx, Dy) in dots_set:
area = (Ax - Bx) ** 2 + (Ay - By) ** 2
max_area = max(max_area, area)
print(max_area)
Si 2 points sont confirmés à partir des coordonnées données, 4 points et la zone de création du carré seront déterminés. Par conséquent, en tant que politique, nous allons essayer toutes les méthodes de sélection de deux points à partir des coordonnées et juger si un carré peut être créé ou non.
itertools
(appelons-les A et B)est.
Pour déterminer si les points C et D sont inclus dans un ensemble donné de coordonnées, la liste en points
aboutit généralement à
TLE```, donc ` Doit être `` dots_set = set (dots) ''.
N = int(input())
A = []
B = []
for _ in range(N):
a, b = map(int, input().split())
A.append(a)
B.append(b)
min_time = float('inf')
for a in A:
for b in B:
total_time = 0
for i in range(N):
total_time += abs(a - A[i]) + abs(A[i] - B[i]) + abs(b - B[i])
min_time = min(min_time, total_time)
print(min_time)
Il semble préférable de placer l'entrée et la sortie soit dans l'Ai soit dans le Bi (il y a probablement d'autres meilleurs endroits ...). Essayez donc tous les A et B pour trouver celui qui vous donnera le moins de temps.
m = int(input()) #m est le nombre d'étoiles dans la constellation que vous recherchez
target = [tuple(map(int, input().split())) for _ in range(m)] #Coordonnées de la constellation que vous souhaitez trouver
n = int(input()) #n est le nombre d'étoiles dans l'image
stars = [tuple(map(int, input().split())) for _ in range(n)] #Coordonnées des étoiles sur la photo
set_stars = set(stars)
target_vector = [] #Maintenir la position relative en tant que vecteur
for i in range(m-1):
y1, x1 = target[i]
y2, x2 = target[i+1]
vector_y, vector_x = y2 - y1, x2 - x1
target_vector.append((vector_y, vector_x))
#Ajoutez des vecteurs pour toutes les étoiles.
target_y, target_x = 0, 0
for star in stars:
y, x = star
new_y, new_x = y, x
count = 0
for vector in target_vector:
y_vector, x_vector = vector
new_y += y_vector
new_x += x_vector
if (new_y, new_x) not in set_stars:
break
count += 1
if count == m - 1: #S'il y a des étoiles après tout ajout de vecteur, les coordonnées de départ sont la source de la réponse
target_y, target_x = y, x
break
#La réponse est les coordonnées relatives aux premières coordonnées de la cible
answer_y = target_y - target[0][0]
answer_x = target_x - target[0][1]
print(answer_y, answer_x)
J'ai fait les indices y et x à l'inverse de la définition du problème, mais il y a une réponse.
La politique est
target_vector``` (sens antihoraire)
break, s'il y en a, comptez le nombre de fois que le vecteur a été utilisé, et s'il peut être utilisé` `` m-1
fois, la reproduction de la constellation est terminée.est.
Recommended Posts