34 / 25 / 8
Регистрация: 16.11.2019
Сообщений: 179

Старая Стена

25.03.2020, 12:13. Показов 4426. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Старая стена
Вдоль границы двух государств когда-то была построена новая стена. Она была собрана из одинаковых кубических блоков и ее высота по всей длине была одинаковой и равнялась 5 блокам. Много лет этого было достаточно, чтобы удержать соседние королевства от нападения друг на друга. Однако инспекция, посланная одним из королей к стене, обнаружила, что во многих вертикальных рядах один или несколько верхних блоков разрушились или упали.

Инспекция составила отчет, в котором для каждого вертикального ряда блоков указана его нынешняя высота. Военное министерство сразу же заинтересовалось вопросом: где находится самый уязвимый участок стены? Участок стены является уязвимым, если он целиком состоит из подряд идущих рядов, высота которых меньше 5, и ограничен с обеих сторон либо границами стены, либо рядами блоков максимальной высоты.

Например, у стены на рисунке два уязвимых участка (второй и третий ряд; пятый и шестой ряды, считая слева). Длина стены на рисунке равна 6.

Один участок стены считается более уязвимым чем другой, если для его полного восстановления понадобится больше блоков.

Для стены на рисунке второй участок более уязвимый чем первый.

Определите номера рядов, с которого начинается и которым заканчивается самый уязвимый участок стены, а также количество блоков, которые необходимы для его полного восстановления. Если возможны несколько вариантов ответа, выведите их все, начиная с самого левого участка (такого, который начинается с блока с минимальным номером).

Входные данные

Cначала вводится число N — длина стены (натуральное, не превышает 1000), затем следуют N целых чисел в диапазоне от 0 до 5 — высота соответствующего вертикального ряда. Гарантируется, что на стене есть хотя бы один уязвимый участок.

Выходные данные

Выведите через пробел номер блока, с которого начинается самый уязвимый участок, затем номер, которым он заканчивается, затем количество блоков, которые нужны для полного восстановления этого участка.

В случае, если самых уязвимых участков несколько, выведите описание каждого в том же формате на отдельной строке, начиная с левого.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.03.2020, 12:13
Ответы с готовыми решениями:

Стена
Жители древнего города узнали, что враг готовится напасть на их чудесный город. Помоги жителям построить стену вокруг него. Для этого...

Стена
Вам дано n кубиков. Вам предлагается построить стену из n кубиков высотой в h слоёв. Осонование стены будет состоять из b кубиков. Каждый...

Найти координаты места, где стена наиболее узкая
Входные данные Вводится n – количество строк, схематически изображающих каменную стену крепости. Далее построчно вводятся n строк,...

7
34 / 25 / 8
Регистрация: 16.11.2019
Сообщений: 179
25.03.2020, 14:11  [ТС]
Вдоль границы двух государств когда-то была построена новая стена. Она была собрана из одинаковых кубических блоков и ее высота по всей длине была одинаковой и равнялась 5 блокам. Много лет этого было достаточно, чтобы удержать соседние королевства от нападения друг на друга. Однако инспекция, посланная одним из королей к стене, обнаружила, что во многих вертикальных рядах один или несколько верхних блоков разрушились или упали.

Инспекция составила отчет, в котором для каждого вертикального ряда блоков указана его нынешняя высота. Военное министерство сразу же заинтересовалось вопросом: где находится самый уязвимый участок стены? Участок стены является уязвимым, если он целиком состоит из подряд идущих рядов, высота которых меньше 5, и ограничен с обеих сторон либо границами стены, либо рядами блоков максимальной высоты.

Например, у стены на рисунке два уязвимых участка (второй и третий ряд; пятый и шестой ряды, считая слева). Длина стены на рисунке равна 6.

Один участок стены считается более уязвимым чем другой, если для его полного восстановления понадобится больше блоков.

Для стены на рисунке второй участок более уязвимый чем первый.

Определите номера рядов, с которого начинается и которым заканчивается самый уязвимый участок стены, а также количество блоков, которые необходимы для его полного восстановления. Если возможны несколько вариантов ответа, выведите их все, начиная с самого левого участка (такого, который начинается с блока с минимальным номером).

Входные данные

Cначала вводится число N — длина стены (натуральное, не превышает 1000), затем следуют N целых чисел в диапазоне от 0 до 5 — высота соответствующего вертикального ряда. Гарантируется, что на стене есть хотя бы один уязвимый участок.

Выходные данные

Выведите через пробел номер блока, с которого начинается самый уязвимый участок, затем номер, которым он заканчивается, затем количество блоков, которые нужны для полного восстановления этого участка.

В случае, если самых уязвимых участков несколько, выведите описание каждого в том же формате на отдельной строке, начиная с левого.

Примеры
Ввод
6
5 3 2 5 2 2
Вывод
5 6 6

Ввод
10
5 1 5 2 5 3 5 5 0 2
Вывод
9 10 8

Я понимаю, что данную задачу нужно решать через конечный автомат, но как именно это реализовать не понимаю.
Помогите написать код.
0
0 / 0 / 0
Регистрация: 16.03.2020
Сообщений: 18
Записей в блоге: 1
27.03.2020, 10:43
поставь метки, тогда ответят
0
0 / 0 / 0
Регистрация: 23.03.2020
Сообщений: 20
28.03.2020, 06:49
Цитата Сообщение от mathic Посмотреть сообщение
поставь метки, тогда ответят
Что за метки?
0
3 / 3 / 0
Регистрация: 22.03.2020
Сообщений: 4
28.03.2020, 12:27
Вот мой код, но проверка выдает ошибку. Если сможешь исправить мою ошибку, скинь код пж
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
n=int(input())
s=list(map(int, input().split()))
ans=[]
k=0
for i in range(len(s)-1):
    if s[i]!=5:
        k=i
        if s[i+1]==5:
            ans.append(i+1)
            ans.append(i+1)
            ans.append(5-s[i])
        else:
            while s[k]!=5 and k!=len(s)-1:
                k+=1
            if s[k]==5:
                ans.append(i+1)
                ans.append(k)
                ans.append((k-i+1)*5-sum(s[i:k+1]))
            else:
                ans.append(i+1)
                ans.append(k+1)
                ans.append((k-i+1)*5-sum(s[i:k+1]))                
max1=0
if n==1:
    print(1, 1, 5-s[0])
else:
    for i in range(2, len(ans), 3):
        if ans[i]>max1:
            max1=ans[i]
    for i in range(2, len(ans), 3):
        if ans[i]==max1:
            print(ans[i-2], ans[i-1], ans[i])
0
3 / 3 / 0
Регистрация: 20.03.2020
Сообщений: 85
28.03.2020, 13:17
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
a = int(input())
A = list(map(int, input().split()))
m = [[0, 0, 0]]
i = 0
while i < a:
    if A[i] != 5:
        n = []
        n.append(i + 1)
        x = 0
        while A[i] != 5:
            x += 5 - A[i]
            i += 1
            if i == a:
                break
        i -= 1
        n.append(i + 1)
        n.append(x)
        if n[2] > m[0][2]:
            m[0] = n
        elif n[2] == m[0][2]:
            m.append(n)
    i += 1
for row in m:
    print(*row)
Добавлено через 9 минут
Но там на одном тесте неправильный ответ!
Исправьте плез!
0
29 / 27 / 2
Регистрация: 17.07.2019
Сообщений: 38
28.03.2020, 16:46
Идея у вас правильная.
А вот и ошибка:
Python
1
2
if n[2] > m[0][2]:
    m[0] = n
надо заменить на
Python
1
2
3
if n[2] > m[0][2]:
    m = [[0, 0, 0]]
    m[0] = n
В итоге я написал такой код(под свой вкус):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
a = int(input())
A = list(map(int, input().split()))
m = [[0, 0, 0]]
for i in range(a):
    if A[i] != 5:
        n = []
        n.append(i + 1)
        x = 0
        while A[i] != 5:
            x += 5 - A[i]
            i += 1
            if i == a:
                break
        n.append(i)
        n.append(x)
        if n[2] > m[0][2]:
            m = [[0, 0, 0]]
            m[0] = n
        elif n[2] == m[0][2]:
            m.append(n)
for row in m:
    print(*row)
3
0 / 0 / 0
Регистрация: 23.03.2020
Сообщений: 20
29.03.2020, 03:49
Цитата Сообщение от Антон Ф Посмотреть сообщение
В итоге я написал такой код(под свой вкус):
Все получилось. Спасибо огромное!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2020, 03:49
Помогаю со студенческими работами здесь

Длинная старая фантастика
Напишите функцию get_result(name), которая принимает на вход имя файла базы данных по структуре идентичной «films.db», и выполняет запрос,...

Ошибка - старая версия
Решил изучать django. Нашел хороший курс,но он на прошлую версию.Сейчас же что-то изменилось и что-то работает не так как надо а что то...

Старая стена
Вдоль границы двух государств когда-то была построена новая стена. Она была собрана из одинаковых кубических блоков и ее высота по всей...

Стена!
Как сделать стену на подобии вк или твиттер? за ранее спс

Стена
Вот условие задачи: Однажды майор Пронин затеял в квартире ремонт. В одной из стен на кухне по плану потребовалось последовательно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru