(Д. Муфаззалов) На ленте исполнителя МТ в соседних ячейках записана последовательность из \(100000\) символов, включающих только нули и единицы. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\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\) – стоп. После выполнения программы на ленте осталось ровно \(343\) нуля. Определите максимально возможное количество символов последовательности, которые могут быть заменены на другой символ в результате выполнения программы.
Решение:
Исполнитель на первой же попавшейся ему единице закончит свою работу, заменив её на ноль. Кроме того, в строке должно остаться ещё \(342\) нуля. Значит, оставшиеся \(100~000 - 343 = 99657\) символов, которые стояли в конце строки после единицы, должны быть также нулями и они заменятся на \(1.\) Всего, максимальное количество символов, которые могут быть заменены в исходной строке, равно \(99658.\)
Тест
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'
orig = 'l' + '0' * 342 + '1' + '0' * 99657 + 'l'
s = list(orig)
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'Количество заменённых символов: {sum(x != y for x, y in zip(s, orig))}')
print(f'Количество нулей в конечной последовательности: {s.count("0")}')
Ответ: \(99658\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене