(К. Багдасарян) На ленте исполнителя МТ в соседних ячейках записана последовательность из \(600\) символов, включающих только нули и единицы. Ячейки справа и слева от последовательности заполнены пустыми символами «\(\lambda\)». В начальный момент времени головка находится в ближайшей ячейке слева от последовательности.
Программа работы исполнителя:
| \(\lambda\) | \(0\) | \(1\) | |
| \(q_0\) | \(\lambda , \, R, \, q_1\) | ||
| \(q_1\) | \(\lambda , \, S, \, q_1\) | \(1, \, S, \, q_1\) | \(0 , \, R, \, q_1\) |
Команды движения каретки: \(L\) – влево, \(R\) – вправо, \(N\) — нет перемещения, \(S\) – стоп. После выполнения программы на ленте осталось ровно \(250\) нулей. Определите минимально возможное число единиц в исходной последовательности.
Решение:
Определим максимально возможное количество единиц в исходной строке. Так как исполнитель завершит работу на первом попавшемся ему нуле, превратив его в единицу, то максимально возможное количество нулей в исходной строке будет \(251.\) Значит, минимально возможное количество единиц в исходной строке \(600 - 251 = 349.\)
Тестируем программно
Python
mt = {'l': {'q0': 'l,R,q1', 'q1': 'l,S,q1'},
'0': {'q1': '1,S,q1'},
'1': {'q1': '0,R,q1'}}
step = {'R': 1, 'S': 0}
state = 'q0'
s = list('l' + '0' * 251 + '1' * 349 + 'l')
p = 0
print(f'Количество единиц в исходной последовательности: {s.count("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")}')
Ответ: \(349\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене