Формат входных данных
В первой строке дано целое число n (1≤n≤2⋅105) — количество карт в последовательности.
Во второй строке даны n целых чисел a1,a2,…,an (1≤ai≤109) — последовательность ковбоя Джо.
В третьей строке даны n целых чисел b1,b2,…,bn (1≤bi≤109) — выигрышная последовательность.
Формат выходных данных
Выведите «YES» (без кавычек), если Джо может получить выигрышную последовательность, иначе выведите «NO».
Решить задачу на языке Java
java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] cards = new int[n];
int[] winningSequence = new int[n];
for (int i = 0; i < n; i++) {
cards[i] = scanner.nextInt();
}
for (int i = 0; i < n; i++) {
winningSequence[i] = scanner.nextInt();
}
String result = canWin(cards, winningSequence) ? "YES" : "NO";
System.out.println(result);
}
public static boolean canWin(int[] cards, int[] winningSequence) {
Stack<Integer> stack = new Stack<>();
int currentIndex = 0;
for (int card : cards) {
if (currentIndex < winningSequence.length && card == winningSequence[currentIndex]) {
currentIndex++;
} else {
stack.push(card);
}
}
while (!stack.isEmpty() && currentIndex < winningSequence.length) {
int topCard = stack.pop();
if (topCard == winningSequence[currentIndex]) {
currentIndex++;
} else {
stack.push(topCard);
}
}
return stack.isEmpty();
}
}
В первой строке считываем количество карт - n.
Во второй строке считываем n целых чисел - последовательность карт ковбоя Джо.
В третьей строке считываем n целых чисел - выигрышную последовательность.
Применяем метод canWin(cards, winningSequence), который возвращает true, если игрок может получить выигрышную последовательность, и false в противном случае.
Метод canWin реализует алгоритм, описанный выше.
Создаем пустой стэк и переменную currentIndex, которая будет указывать на текущую карту в выигрышной последовательности.
Затем перебираем карты из последовательности ковбоя Джо. Если текущая карта совпадает с картой из выигрышной последовательности, увеличиваем currentIndex на 1.
Если текущая карта не совпадает с картой из выигрышной последовательности, добавляем ее в стэк.
Затем проверяем, осталась ли еще какая-то карта в стэке, иначе говоря, проверяем, были ли все карты из последовательности ковбоя Джо сыграны в правильном порядке.
Если стэк пуст и currentIndex равен длине выигрышной последовательности, значит, игрок может получить выигрышную последовательность, и возвращаем true.
Если стэк не пуст или currentIndex не равен длине выигрышной последовательности, то игрок не может получить выигрышную последовательность, и возвращаем false.
Выводим результат (YES или NO) на экран.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет