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

5459 Ишимов

leonbn: Добрый день! Разошлось решение программное (совпало с сайтом) и в Excel. Стал анализировать файл с данными. Обнаружил, что он содержит 605 одинаковых строк, из которых 133 подпадают под возможность бронирования. Например: 1 71 6 повторяется 2 раза. На мой взгляд либо повторяющихся строк не должно быть в файле, либо в ответ должна попадать только одна из них. Тогда верный ответ 9988 и 2275 Еще, аналогичная задача 5162 содержит файл с данными аналогичными задачи 5459, а ответ другой... что то тут не так ...

Ответов - 5

leonbn: с задачей 5162 я поторопился, там условие другое, но проблема задвоенных строк остается

Поляков: Спасибо за замечание, дубли убраны.

oval: Каждый из них боится высоты, поэтому места у окон покупать нельзя. Места у окон считаются самые крайние места в каждом ряду (первое и последнее). В предложенном решении проверка [pre2]if s.startswith('0000') or s.endswith('0000'):[/pre2] не учитывает это условие. В ответе учитывается, например, ряд 25 на первом этаже, в которм занято 5ое место. В этом ряду могут быть куплены места 1, 2, 3 и 4, но 1 место крайнее. Программа Ишимова М. выдает, вообще, не правильный ответ. Например: потерян 7 ряд на первом этаже с занятым 1ым местом. Считаю, что правильный ответ должен быть: 9996 2464


oval: Кстати...K – количество мест в каждом ряду самолета (натуральное число, не превышающее 10) Предложенная проверка не найдет ряд при К>=8, в котором заняты места 1, 2, 7 и 8 А как по условию задачи определить в 10_000 ряду не куплено ни одного места или такого ряда нет в самолете?

oval: [pre2] from collections import defaultdict d1 = defaultdict(list) d2 = defaultdict(list) with open('26-94.txt') as file: h, k = map(int, file.readline().split()) for f in file: e, r, n = map(int, f.split()) if e == 1: d1[r].append(n) else: d2[r].append(n) cnt = 0 maxrow = 0 l = 4 for i in d1: a = [0] * k for j in d1[ i]: a[j - 1] = 1 for j in range(1, k - l ): if sum(a[j:j + l]) == 0: cnt += 1 maxrow = max(maxrow, i) break for i in d2: a = [0] * k for j in d2[ i]: a[j - 1] = 1 for j in range(1, k - l): if sum(a[j:j + l]) == 0: cnt += 1 maxrow = max(maxrow, i) break print(maxrow, cnt) [/pre2]



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