Информатика. ЕГЭ
Задания для подготовки
Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников
Задание 12. Информатика. ЕГЭ 2026. Крылов. Вариант 8
- Просмотры: 1229
- Изменено: 29 ноября 2025
На ленте в соседних ячейках записана последовательность из \(350\) символов, включающая только нули и единицы. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\lambda\)». В начальный момент времени головка расположена в ближайшей ячейке справа от последовательности.
Программа работы исполнителя:
| \(\lambda\) | \(1\) | \(0\) | |
| \(q_0\) | \(\lambda , \, L, \, q_1\) | ||
| \(q_1\) | \(\lambda , \, R, \, q_1\) | \(0, \, L, \, q_1\) | \(1, \, L, \, q_1\) |
| \(q_2\) | \(\lambda , \, S, \, q_2\) | \(0, \, R, \, q_2\) | \(0, \, S, \, q_2\) |
После выполнения программы на ленте осталось ровно \(100\) нулей. Определите минимально возможное число нулей в исходной последовательности.
Решение:
Исполнитель MT на первом проходе (справа налево в состоянии \(q_1\)) заменит нули единицами, а единицы нулями. На втором проходе (слева направо в состоянии \(q_2\)) он проделаем ту же самую операцию с единицами (которые изначально были нулями) и остановится на первом нуле, заменив его единицей. Получается, что количество нулей \(Z\) в конечной строке будет определяться количеством левых нулей \(L0\) в исходной строке (до самой левой единицы) и количеством единиц \(R1\) после той же самой левой единицы: $$ \lambda \underbrace{00 \ldots 00}_{L0} 1 \underbrace {00 \ldots 00}_{R0} \underbrace{11 \ldots 11}_{R1} \lambda .$$ Общее количество нулей \(Z = L0 + R1 = L0 + 350 - R0 - L0 - 1 = 349 - R0 = 100\) при условии, что \(L0 + R0 = \min.\) Получаем, что \(R0 = 349 - 100 = 249.\) Минимум \(L0 + R0\) достигается при \(L0 = 0.\) Таким образом минимальное количество нулей в исходной строке — \(249.\)
Проверяем программно:
Python
com = {'l': {'q0': 'l,L,q1', 'q1': 'l,R,q2', 'q2': 'l,S,q2'},
'1': {'q1': '0,L,q1', 'q2': '0,R,q2'},
'0': {'q1': '1,L,q1', 'q2': '1,S,q2'}}
step = {'L': -1, 'R': 1, 'S': 0}
s = ['l'] + ['1'] + ['0'] * 249 + ['1'] * 100 + ['l']
print('Нулей в исходной строке', s.count('0'))
p = len(s) - 1
state = 'q0'
ch, act, st = com[s[p]][state].split(',')
s[p] = ch
state = st
p += step[act]
while act != 'S':
ch, act, st = com[s[p]][state].split(',')
s[p] = ch
state = st
p += step[act]
print('Нулей в конечной строке', s.count('0'))
Ответ: \(249\)
Обсуждение задания
Здесь пока нет ни одного комментария. Будьте первым!


