elif len(ans) > 1 and a[i] == ans[-1] and a[i] == ans[-2]:
ans.pop()
ans.pop()
x = a[i]
k += 3
elif x == a[i]:
k += 1
continue
else:
x = -1
ans.append(a[i])
print(k)
print(*ans)
Объяснение:
Задача решается с помощью структуры данных под названием стек. Мы кладем элементы в конец стека, и, когда видим, что три последних числа в стеке - одинаковы, то удаляем их и запоминаем удаленный элемент. Дальше если мы встречаем тот же элемент то не кладем в стек а просто увеличиваем счетчик. Если же следующий элемент оказался отличным от предыдущего удаленного, то кладем его в стек.
2 votes Thanks 1
dajex
И если с отступами проблема, то напиши. Я тогда скрин кину.
Answers & Comments
Ответ:
n = int(input())
a = list(map(int, input().split()))
ans = []
k = 0
x = -1
for i in range(len(a)):
if i < 2:
ans.append(a[i])
elif len(ans) > 1 and a[i] == ans[-1] and a[i] == ans[-2]:
ans.pop()
ans.pop()
x = a[i]
k += 3
elif x == a[i]:
k += 1
continue
else:
x = -1
ans.append(a[i])
print(k)
print(*ans)
Объяснение:
Задача решается с помощью структуры данных под названием стек. Мы кладем элементы в конец стека, и, когда видим, что три последних числа в стеке - одинаковы, то удаляем их и запоминаем удаленный элемент. Дальше если мы встречаем тот же элемент то не кладем в стек а просто увеличиваем счетчик. Если же следующий элемент оказался отличным от предыдущего удаленного, то кладем его в стек.