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

задание 26 номер 129

ингрид: 129) (ЕГЭ-2023) На производстве штучных изделий N деталей должны быть отшлифованы и окрашены. Для каждой детали известно время её шлифовки и время окрашивания. Детали пронумерованы начиная с единицы. Параллельная обработка деталей не предусмотрена. На ленте транспортёра имеется N мест для каждой из N деталей. На ленте транспортёра детали располагают по следующему алгоритму: – все 2N чисел, обозначающих время окрашивания и шлифовки для N деталей, упорядочивают по возрастанию; – если минимальное число в этом упорядоченном списке – это время шлифовки конкретной детали, то деталь размещают на ленте транспортёра на первое свободное место от её начала; – если минимальное число – это время окрашивания, то деталь размещают на первое свободное место от конца ленты транспортёра – если число обозначает время окрашивания или шлифовки уже рассмотренной детали, то его не принимают во внимание. Этот алгоритм применяется последовательно для размещения всех N деталей. Определите номер последней детали, для которой будет определено её место на ленте транспортёра, и количество деталей, которые будут отшлифованы до неё. Входные данные представлены в файле 26-129.txt следующим образом. Первая строка входного файла содержит натуральное число N (1 ≤ N ≤ 1000) – количество деталей. Следующие N строк содержат пары чисел, обозначающих соответственно время шлифовки и время окрашивания конкретной детали (все числа натуральные, различные). Запишите в ответе два натуральных числа: сначала номер последней детали, для которой будет определено её место на ленте транспортёра, затем количество деталей, которые будут отшлифованы до неё. моя программа [pre2] f=open('26-129-1.txt') a=[] n=997 for i in range(2*n): v,t,num=f.readline().split() a.append([int(v),t,int(num)]) b=[0]*n k=0 p=[] for i in range (2*n): v,t,num=a fl=0 for j in range(n): if b[j]==num: fl=1 if t=="w" and fl==0: for j in range(n): if b[j]==0: b[j]=num p=num k=k+1 break elif t=='q' and fl==0: for j in range(n-1,-1,-1): if b[j]==0: b[j]=num p=num break print(p,b,k) [/pre2] ответ 944 и 489 В ответе 895 488 Второе число меня не волнует, Но вот первое. файл мы открыли в екселе добавили где шлифовка букву w, где окрасить q. И каждой из них присвоили номер детали. получилось три столбца, первый время шлифовки\окрашивания, второй это непосредственно сам тип и третий столбец это номер детали. также в екселе отсортировали по возрастанию. 3 q 535 5 w 1 10 q 112 13 q 576 16 q 267 Заполняет верно, так если бы делали в ручную. (проверили первые 10 строк, разносит в начало и конец верно).Но последняя деталь у меня отличается от ответа. Подскажите пожалуйста, что не так в программе

Ответов - 1

Ж: Ваш код у меня не запустился, т.к. нет поправленного файла. Номер детали поправили на 1? (нумерация идет в жизни с 1, а в питоне с 0) Вот рабочий код: (можете сравнить порядок деталей.) [pre2] f=open('d:/26-129.txt') n = int(f.readline()) s = [list(map(int, c.strip().split())) for c in f.readlines()] s = [(s[0], 1, i + 1) for i in range(len(s))] + [(s[1], 2, i + 1) for i in range(len(s))] s=sorted(s) konv = {}; kol=0 for c in s: if c[1] == 1 and c[2] not in konv: konv[c[2]] = 'on' answer=(c[2], kol) kol += 1 if c[1] == 2 and c[2] not in konv: konv[c[2]] = 'on' print(*answer) print('Порядок деталей на конвейере:',*konv.keys()) [/pre2]



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