Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 14, 2021 02:34:24

eiktyrnir
Зарегистрирован: 2021-04-14
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Ремонт дороги


Ремонт дороги
Длина автомобильной дороги составляет 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)
Решение №2
 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)
В компиляторе все красиво, но в проверщике выдает ошибку "Программа выполнялась слишком долго и была прервана"

Помогите разобраться?!

Офлайн

#2 Апрель 14, 2021 22:49:54

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

Ремонт дороги

eiktyrnir
В тесте из примера первая компания может отремонтировать участок номер 3, вторая компания — участки с 5 по 7.
Короче, эти задания составлял какой-то дурак. Выкинь их нафиг.

По его описанию вот этому всему либо первая компания отремонтирует участки 3 и 5, либо вторая компания не отремонтирует участок 7 и нужно третью компанию ещё для участка 7.



Отредактировано py.user.next (Апрель 14, 2021 22:54:04)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version