Информатика. ЕГЭ
Задания для подготовки
Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников
Задание 12. Информатика. ЕГЭ. Поляков-8295
- Просмотры: 895
- Изменено: 27 сентября 2025
(Д. Муфаззалов) На ленте исполнителя МТ в соседних ячейках записана последовательность из \(5000\) символов, включающих только нули и единицы. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\lambda\)». В начальный момент времени головка находится в ближайшей ячейке справа от последовательности.
Программа работы исполнителя:
| \(\lambda\) | \(0\) | \(1\) | |
| \(q_0\) | \(\lambda , \, L, \, q_1\) | ||
| \(q_1\) | \(\lambda , \, S, \, q_1\) | \(1, \, L, \, q_1\) | \(0 , \, S, \, q_1\) |
Команды движения каретки: \(L\) – влево, \(R\) – вправо, \(N\) — нет перемещения, \(S\) – стоп. После выполнения программы на ленте осталось ровно \(243\) нуля. Обозначим число нулей в исходной последовательности через \(x.\) Определите количество возможных различных значений \(x.\)
Решение:
Если в строке все \(5000\) символов нули, то после исполнения алгоритма в конечной строке нулей не останется совсем. Значит, как минимум одна единица всё же присутствует. Действительно, строка $$\lambda \underbrace{0 \ldots 0}_{242} 1 \underbrace{0 \ldots 0}_{4757} \lambda$$ даст на выходе \(243\) нуля. В этой строке находятся \(4999\) нулей. С другой стороны, в исходной строке должно находится минимум \(242\) нуля. Тогда на первой же единице исполнитель закончит свою работу, добавив в строку ещё один нуль. Вот пример строки с минимальным количество нулей. $$\lambda \underbrace{0 \ldots 0}_{242} \underbrace{1 \ldots 1}_{4758} \lambda$$ Т.о. \(x \in [242; \, 4999].\) Всего различных значений \(x\) найти нетрудно: \(4999 - 242 + 1 = 4758.\)
Тест
Python
mt = {'l': {'q0': 'l,L,q1', 'q1': 'l,S,q1'},
'0': {'q1': '1,L,q1'},
'1': {'q1': '0,S,q1'}}
step = {'R': -1, 'L': 1, 'S': 0, 'N': 0}
state = 'q0'
#s = list('l' + '0' * 242 + '1' + '0' * 4757 + 'l') # Максимальное количество нулей в исходной последовательности
s = list('l' + '0' * 242 + '1' * 4758 + 'l') # Минимальное количество нулей в исходной последовательности
print(f'Количество нулей в исходной последовательности: {s.count("0")}')
p = len(s) - 1
s[p], m, state = mt[s[p]][state].split(',')
while m != 'S':
p -= step[m]
s[p], m, state = mt[s[p]][state].split(',')
print(f'Количество нулей в конечной последовательности: {s.count("0")}')
Ответ: \(4758\)
Обсуждение задания
Здесь пока нет ни одного комментария. Будьте первым!


