Ограничение времени 1 секунда Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
Современные генные инженеры создали 26 различных оснований, из которых они собираются конструировать гены. Они обозначили эти основания латинскими буквами от A до Z. Таким образом, структуру любого нового гена можно записать строкой из латинских букв.
Свойства генов в значительной степени определяются парами соседних оснований, например, в геноме «AССABAC» имеются такие пары оснований: «АС», «СС», «СА», «АВ», «ВА», «АС».
Показателем схожести двух геномов ученые считают количество пар соседствующих оснований одного генома, которые имеются в другом геноме.
Вам заданы две последовательности оснований (т.е. два генома), нужно определить показатель схожести одного генома другому.
Формат ввода
Строка 1: представление структуры первого генома в виде непустой строки из заглавных латинских букв A-Z.
Строка 2: представление структуры второго генома в аналогичном виде.
Длины обеих строк не превосходят 105.
Формат вывода
Программа должна вывести одно целое число –- показатель схожести, вычисленный для геномов, заданных в первой и второй строке.
Пример
Ввод Вывод
ABBACAB
BCABB
4
Примечания
Во втором геноме имеются следующие пары оснований первого генома: AB, BB, CA, AB. Так как пара AB в первом геноме встречается два раза, поэтому она подсчитана в ответе два раза, поэтому она подсчитана в ответе два раза.
def shortest_chains(n):
def next_chains(chain):
new_elems = set()
for i in range(len(chain)):
for j in range(i, len(chain)):
new_elem = chain[i] + chain[j]
if new_elem > chain[-1] and new_elem not in new_elems:
new_elems.add(new_elem)
yield chain + [new_elem]
current_stage = None
next_stage = [[1]]
answer = []
while len(answer) == 0:
current_stage = next_stage
next_stage = []
for chain in current_stage:
next_stage.extend(next_chains(chain))
answer = [chain[1:] for chain in next_stage if chain[-1] == n]
return answer
def print_solution(n):
answer = shortest_chains(n)
print("Для {} есть {} решений(-я, -е):".format(n, len(answer)))
for i in range(len(answer)):
print("{}. {}".format(i + 1, " ".join(map(str, answer[i]
print()
Запустив, можно получить все 5 возможных решений для числа 7, по 4 решения для 15 и 23 и 87 решений для 63.