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