Перед ковбоем Джо выложены n карт со значениями a1, a2,…, an . Он хочет получить выигрышную оследовательность карт со значениями b1, b2,…,bn. Ковбой может выбрать непрерывный отрезок карт в своей последовательности [l,r] (1<=l<=r<=n) и упорядочить карты в этом отрезке по неубыванию. Например, если перед ковбоем лежат карты
{3,3,2,5,1,5}{3,3,2,5,1,5}, он может выбрать отрезок [2,5][2,5] и получить последовательность {3,1,2,3,5,5}{3,1,2,3,5,5}.
Получится ли у ковбоя Джо получить выигрышную последовательность с помощью применения вышеописанной операции ровно один раз?
Решить задачу на языке Python
python
def can_get_winning_sequence(a, b):
n = len(a)
m = len(b)
winning_sequence = [0] * m
l = -1
r = -1
for i in range(m):
if a[i] == b[0]:
l = i
if a[i] == b[-1]:
r = i
if l == -1 or r == -1:
return "Нет"
for i in range(l, r+1):
winning_sequence[i-l] = a[i]
winning_sequence.sort()
for i in range(l, r+1):
a[i] = winning_sequence[i-l]
if a == b:
return "Да"
else:
return "Нет"
a = [3, 3, 2, 5, 1, 5]
b = [3, 1, 2, 3, 5, 5]
result = can_get_winning_sequence(a, b)
print(result)
Результат выполнения программы будет "Да", так как с использованием одной операции над исходной последовательностью "a" можно получить выигрышную последовательность "b".
Данный алгоритм имеет сложность O(n), где n - количество элементов в исходной последовательности "a".Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет