若只存在 2n−2 种卡牌,则留下一个空栈,其他每个栈最多只放两张卡牌。这时候的栈只有四种情况:
-
空栈;
-
只有一张卡牌;
-
栈底的下一张同种卡牌来的早,这时只能从栈底消;
-
栈顶的下一张同种卡牌来的早,这时只能从栈顶消;
若有 2n−1 种卡牌,考虑所有栈中已有 2n−2 种卡牌,要加入一张另一种卡牌放哪:
-
若存在一个栈从栈底消,放在该栈不会使该栈中的卡牌不能消去;
-
否则,放在空栈。
所以有 2n−1 种卡牌时栈还可能存在第五种情况:
栈中有三种卡牌,只保证栈底的卡牌比栈中间的卡牌下一张同种卡牌来的早,从栈底消去后会变成第 3 或第 4 种情况
空栈用栈维护其下标,2,3,4,5 情况的栈用 set 维护其下标,直接操作即可。