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

Ошибка в условии 6321

MercuL`: В формулировке задачи имеется две пары абсолютно разных вопросов. Два - в усвловии: "Определите наибольшее время (в минутах), которое клиент стоял в очереди, и время начала обслуживания последнего клиента в том банкомате, в котором было обслужено наибольшее количество клиентов. Если таких банкоматов несколько, укажите наименьший подходящий номер банкомата." И еще два после входных данных: "Запишите в ответе два числа: наименьшее количество клиентов, которые были обслужены одним банкоматом за 24 часа, и время начала обслуживания последнего клиента этим банкоматом." Я так понял, отвечать следует на первую пару вопросов, поскольку именно для нее приведен пример. Однако наличие разных вопросов все равно путает.

Ответов - 6

ovkuz: MercuL` , подскажите, а сошелся ли у Вас ответ с предложенным? Я решала, что так, что так.. Не сошлось( А у Вас?

MercuL`: ovkuz пишет: Было бы замечательно, если бы автор показал разбор и предоставил свое решение. ovkuz пишет: подскажите, а сошелся ли у Вас ответ с предложенным? Ответ сошелся. Вот решение. Постараюсь объяснить что-то, но только если сам вспомню. Давно делал. [pre2] file = open('26-112.txt') n, m = map(int, file.readline().split()) banks = [] for i in range(n): banks.append([0]) clients = [] for i in file: a, b = map(int, i.split()) clients.append([a, b]) clients.sort(key=lambda x: x[0]) waits = [] for i in range(len(clients)): wait = 0 flag = False while flag != True: for j in range(len(banks)): if clients[ i][0] + wait >= banks[j][-1]: banks[j].append(clients[ i][0]+wait+clients[ i][1]) flag = True waits.append(wait) break wait += 1 if clients[ i][0] + wait >= 1440: break print(max(waits)) mx_len = 0 mx_client = 0 for i in banks: if len(i) > mx_len: mx_client = i[-2] mx_len = len(i) print(mx_client) [/pre2]

ovkuz: MercuL` пишет: Ответ сошелся Спасибо большое! Я сообразила, я упустила из виду, что нужно смотреть только за сутки. Но ответ у меня все равно другой. Время ожидания у меня 652 мин. Дело в том, что у Вас проверка на вылет за пределы суток происходит уже после того, как Вы записали время в список банкоматов (banks[j].append(clients[ i][0]+wait+clients[ i][1]) ) и записали время ожидания в список времени ожидания (waits.append(wait)). Если Вы спринтуете ваш список банкоматов, то увидите в конце ... 1414, 1432, 1434, 1446]] То есть вылет на следующие сутки. Возможно, я не права, но мне так кажется) И все таки хотелось обратиться к Константину Юрьевичу с просьбой поправить формулировку в задаче. Потому что всех будут смущать и дальше два противоположных вопроса, имеющихся в задаче: "Определите наибольшее время (в минутах), которое клиент стоял в очереди, и время начала обслуживания последнего клиента в том банкомате, в котором было обслужено наибольшее количество клиентов. Если таких банкоматов несколько, укажите наименьший подходящий номер банкомата." "Запишите в ответе два числа: наименьшее количество клиентов, которые были обслужены одним банкоматом за 24 часа, и время начала обслуживания последнего клиента этим банкоматом."


ovkuz: Вот мой пример решения: f = open('26-112.txt') n, m = [int(i) for i in f.readline().split()] print(n, m) b = [[0] * 3 for i in range(n)] a = [] for i in range(m): nv, t = [int(i) for i in f.readline().split()] a.append([nv, nv + t]) # print(a[:100]) a = sorted(a, key=lambda x: x[0]) print(a[:100]) mx = 0 for i in range(m): for j in range(n): if a[0] >= b[j][1]: b[j][0] = a[0] b[j][1] = a[1] b[j][2] = b[j][2] + 1 break else: mn = min(b, key=lambda x: x[1]) j = b.index(mn) if a[1] + (b[j][1] - a[0]) > 1440: break else: to = b[j][1] - a[0] mx = max(mx, to) b[j][0] = b[j][1] b[j][1] = a[1] + to b[j][2] = b[j][2] + 1 print(mx) maxb = max(b, key=lambda x: x[2]) print('maxb', maxb) minb = min(b, key=lambda x: x[2]) print('minb', minb) print(b) Я тут ответила на оба вопроса: 652 - время ожидания макс maxb [1424, 1432, 90] - банкомат с макс кол-вом клиентов minb [1409, 1427, 73] - банкомат с мин кол-вом клиентов Буду благодарна, MercuL, если глянете одним глазочком и подскажете, что не так) Сорри, не получилось сделать отступы(

ovkuz: "При таких исходных данных наибольшее время ожидания (10) будет у клиента со временем обслуживания 9. Наибольшее число клиентов (3) обслужит 1-й банкомат: это клиенты со временем обслуживания 8, 4 и 14. Последний клиент начинает работу со 1-м банкоматом на 13-й минуте. Ответ: 10 13" Но похоже, что последний клиент пойдет ко 2-му банкомату, и сможет это сделать только на 18 минуте. Именно поэтому время ожидания и составило (18 - 8) 10 минут. Так что ответ у меня не сошелся нигде с автором задачи( Было бы замечательно, если бы автор показал разбор и предоставил свое решение.

Поляков: Это задача 26.116 из основного сборника, решение есть на сайте.



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