喵了个喵 题解

传送门

这玩意是 T2 ???

观察到 \(k=2n-2\)\(k=2n-1\),所以我们可以尝试让每个栈里面都保持两张牌。同时保留一个空栈,用来消栈底。 记这个保留的空栈为 \(sp\)

策略 1:

  1. 如果当前牌堆顶的牌能消,必然消;

  2. 否则除了 \(sp\),如果存在一个没有填到两张牌的栈,放进去。

\(k=2n-1\),可能策略1不适用:当前除了 \(sp\) 都填了 \(2\) 张牌,且牌堆顶的牌在当前所有栈中都没有出现。

我们找到当前牌堆中第一张出现在栈底的牌。 这张牌我们希望它放到 \(sp\) 号栈用操作二消除。但是当前牌堆顶可能要占用 \(sp\) 号栈,怎么办?

假设第一张出现在栈底的牌位置是 \(x\)\(x\) 对应的栈靠上的牌是 \(y\)。我们检查牌堆顶到 \(x\) 中间 \(y\) 出现了多少次:

  1. 如果是奇数次,说明可以把 \(y\) 消掉。那我们把牌堆顶放到 \(sp\) 号栈上。

    因为 \(x\) 是第一张栈底牌,所以牌堆顶到 \(x\) 中间的牌都可以放到某个栈的栈顶消除。

    于是我们把牌堆顶放到 \(sp\),把中间的牌放到栈顶消除,\(y\) 都放到 \(x\) 的栈上面,然后把 \(x\) 放到 \(x\) 的栈上——此时 \(y\) 已经消干净了。此时 \(x\) 所在的栈已经空了,我们把 \(sp\) 号栈改为这个栈即可。

  2. 如果是偶数次,把牌堆顶放到 \(x\) 所在栈上面(此时 \(y\) 被夹在中间),然后中间的除了 \(y\) 的牌都放到对应栈顶消除,\(y\) 都放到 \(sp\) 号栈消除(\(y\) 偶数次)。

    然后把 \(x\) 放到 \(sp\) 号栈和 \(x\) 原来的栈底消除,此时 \(x\) 原来所在的栈就剩下原来牌堆顶和 \(y\) 了。依然满足每个栈只有 \(\le 2\) 张牌。

posted @ 2024-03-02 16:56  FLY_lai  阅读(5)  评论(0编辑  收藏  举报