Форум » Массивы, сортировка, работа с файлами » Ошибка в коде, задача 26 » Ответить

Ошибка в коде, задача 26

Ndt: [pre2] f=open("C:/Users/whcuf/Desktop/Новый текстовый документ.txt") n,m=map(int,f.readline().split()) A=[] B=[] C=[] D=[] for i in range(n): x,y,z=map(str,f.readline().split()) x=int(x) y=int(y) if z=="B": B.append(x*y) else: A.append(x) D.append(y) print(m-sum(B)) a=0 k=0 a=m-sum(B)#1425146 for i in range(len(B)): b=A.index(min(A)) if (min(A)*D[ b])<a): if D[ b]!=0: if min(A)!=0: k+=D[ b] a-=min(A)*D[ b] A.remove(min(A)) else: if (min(A)*D[ b]>a): while min(A)*D[ b]>a: D[ b]-=1 if min(A)*D[ b]<a: if D[ b]!=0: if min(A)!=0: a-=min(A)*D[ b] A.remove(min(A)) k+=D[ b] print(k*b+sum(B)) print(k,a)[/pre2] Предприятие производит оптовую закупку некоторых изделий A и B, на которую выделена определённая сумма денег. У поставщика есть в наличии партии этих изделий различных модификаций по различной цене. На выделенные деньги необходимо приобрести как можно больше изделий B независимо от модификации. Если у поставщика закончатся изделия B, то на оставшиеся деньги необходимо приобрести как можно больше изделий A. Известны выделенная для закупки сумма, а также количество и цена различных модификаций данных изделий у поставщика. Необходимо определить, сколько будет закуплено изделий A и какая сумма останется неиспользованной. Входные данные. Первая строка входного файла содержит два целых числа: N — общее количество партий изделий у поставщика и M — сумма выделенных на закупку денег (в рублях). Каждая из следующих N строк описывает одну партию и содержит два целых числа (цена одного изделия в рублях и количество изделий в партии) и один символ (латинская буква A или B), определяющий тип изделия. Все данные в строках входного файла отделены одним пробелом. В ответе запишите два целых числа: сначала количество закупленных изделий типа A, затем оставшуюся неиспользованной сумму денег. Пример входного файла: 4 1000 30 8 A 50 12 B 40 14 A 20 10 B В данном случае сначала нужно купить изделия B: 10 изделий по 20 рублей и 12 изделий по 50 рублей. На это будет потрачено 800 рублей. На оставшиеся 200 рублей можно купить 6 изделий A по 30 рублей. Таким образом, всего будет куплено 6 изделий A и останется 20 рублей. В ответе надо записать числа 6 и 20.

Ответов - 2

Ndt: Правильный ответ:7165 245 Мой ответ:7208 272

VectorASD: Мой собственный код, сварганенный всего-лишь сегодня, но с правильными ответами для обеих задач XD [pre2] GPath = "" #__file__.rsplit("/", 1)[0] + "/" #Начал разработку: 15:32 #Время получения ответа: 15:47 (с первой попытки ;S) #Время модификации задачи до мульти: 15:50 (с первой попытки ;S) def Z3755(): def Brain(R): with open(GPath + "26-42.txt") as file: N, S = map(int, file.readline().split()) Data = [file.readline().split() for i in range(N)] Data = [(i[0], int(i[1]), int(i[2])) for i in Data] #N, S = 4, 1000 #Data = ("A", 14, 12), ("Z", 30, 7), ("A", 40, 20), ("Z", 50, 15) #Data = ("Z", 14, 12), ("A", 30, 7), ("Z", 40, 20), ("A", 50, 15) Data = sorted(Data, key = lambda i: i[1]) A = [i[1] * i[2] for i in Data if i[0] == "AZ"[R]] Z = [(i[1], i[2]) for i in Data if i[0] == "ZA"[R]] S -= sum(A) print("Отсалось после A:", S) NZ = 0 for i in Z: C = min(S // i[0], i[1]) #print(S, "%s/%s" % (C, i[1]), C * i[0]) S -= C * i[0] NZ += C print("Отсалось после Z:", S) return NZ, S NZ, S = Brain(0) print("Ответ Z3755:", NZ, S) NZ, S = Brain(1) print("Ответ Z3754:", NZ, S) def Z3754(): Z3755() Z3754() [/pre2]



полная версия страницы