考え方
逆順に操作していって$A$を空の数列にまで戻せるかを確かめる.flip回数の偶奇性を記録しておき,「操作Bを逆順に(できるだけ)行う→操作Aを逆順に行う」を繰り返す.flip回数が奇数なら0を1で置き換えて考えれば良い.
操作Bを逆順に(できるだけ)行うのは,端にflipさせた文字が出るまで削った方が,あとの操作で有利なため.
回答例
from collections import deque N = int(input()) A = list(map(int, input().split())) q = deque(A) flip = 0 while q: if q[0] == q[-1] == flip ^ 1: break while q and q[-1] == flip: q.pop() if q and q[0] == flip: q.popleft() flip ^= 1 print('Yes' if not q else 'No')