Форум сайта python.su
Ремонт дороги
Длина автомобильной дороги составляет N километров. Часть дороги необходимо отремонтировать. При обследовании дорога была разбита на N участков длиной 1 километр, и для каждого участка было определено, нуждается ли он в ремонте или нет, после чего был составлен план дороги, на котором отмечены участки, нуждающиеся в ремонте.
Для ремонта дороги можно привлечь несколько компаний-подрядчиков. Каждая компания может отремонтировать только непрерывный фрагмент дороги. При этом из-за требований антимонопольного законодательства длина фрагмента дороги, который ремонтирует одна компания, не должна превышать L километров (даже если на фрагменте, который ремонтирует одна компания, есть не нуждающиеся в ремонте участки, общая длина данного фрагмента не должна превышать L километров).
Определите, какое наименьшее количество компаний-подрядчиков необходимо привлечь для ремонта дороги.
Входные данные
Первая строка входных данных содержит целое число L ( L> 0 ) — максимальную длину фрагмента дороги, который может отремонтировать одна компания. Во второй строке входных данных записано целое число N ( N> 0 ) — длина всей дороги. Следующие N строк содержат по одному числу, равному 0 или 1. Число 1 обозначает, что соответствующий участок дороги нуждается в ремонте, число 0 — что участок не требует ремонта.
Выходные данные
Программа должна вывести одно целое число — минимальное количество компаний-подрядчиков, которое необходимо привлечь для ремонта дороги.
Примечание
В тесте из примера первая компания может отремонтировать участок номер 3, вторая компания — участки с 5 по 7.
Примеры
Ввод
3
8
0
0
1
0
1
0
1
0
Вывод
2
Решение №1
S = int(input()) dor = [int(input()) for _ in range(int(input()))] if any(dor): Otvet = 1 p = dor.index(1) q = len(dor) - dor[::-1].index(1) while p + S < q: Otvet += 1 p = p + S + dor[p + S:].index(1) print(Otvet) else: print(0)
l = int(input()) n = int(input()) isWork = False currl = 0 kb = 0 a = [] for i in range(n): b = int(input()) a.append(b) for i in range(n): if a[i] == 0: if isWork == True: currl += 1 if currl >= l: isWork = False currl = 0 else: if isWork == True: currl += 1 if currl >= l: isWork = False currl = 0 else: currl += 1 kb += 1 isWork = True print(kb)
Офлайн
eiktyrnirКороче, эти задания составлял какой-то дурак. Выкинь их нафиг.
В тесте из примера первая компания может отремонтировать участок номер 3, вторая компания — участки с 5 по 7.
Отредактировано py.user.next (Апрель 14, 2021 22:54:04)
Офлайн