Перед ковбоем Джо выложены 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_win(cards, desired):
# Создаем два массива: один для карт перед ковбоем и другой для желаемой выигрышной последовательности карт
n = len(cards)
prev = [0] * n
suf = [0] * n
# Заполняем массив prev справа налево, так как нам нужно знать предыдущие значения для каждого элемента
prev[-1] = cards[-1]
for i in range(n - 2, -1, -1):
prev[i] = min(cards[i], prev[i + 1])
# Заполняем массив suf слева направо, так как нам нужно знать следующие значения для каждого элемента
suf[0] = cards[0]
for i in range(1, n):
suf[i] = max(cards[i], suf[i - 1])
# Проверяем, может ли последовательность desired быть получена из cards с помощью операции один раз
for i in range(n - 1):
if suf[i] <= desired[i + 1] and desired[i] <= prev[i + 1]:
return True
return False
Давайте протестируем эту функцию с некоторыми примерами:
python
# Пример 1
cards = [3, 3, 2, 5, 1, 5]
desired = [3, 1, 2, 3, 5, 5]
print(can_win(cards, desired)) # Output: True
# Пример 2
cards = [1, 2, 3, 4, 5]
desired = [5, 4, 3, 2, 1]
print(can_win(cards, desired)) # Output: False
# Пример 3
cards = [1, 2, 3, 4, 5]
desired = [1, 2, 3, 4, 5]
print(can_win(cards, desired)) # Output: True
Вывод:
1. Для последовательности карт [3, 3, 2, 5, 1, 5] и желаемой последовательности [3, 1, 2, 3, 5, 5], ковбой может получить выигрышную последовательность, поэтому результатом является True.
2. Для последовательности карт [1, 2, 3, 4, 5] и желаемой последовательности [5, 4, 3, 2, 1], ковбою не удастся получить выигрышную последовательность с помощью операции один раз, поэтому результатом является False.
3. Для последовательности карт [1, 2, 3, 4, 5] и желаемой последовательности [1, 2, 3, 4, 5], ковбой может получить выигрышную последовательность, поэтому результатом является True.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет