喵了个喵 题解

传送门

这玩意是 T2 ???

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

策略 1:

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

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

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

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

假设第一张出现在栈底的牌位置是 xx 对应的栈靠上的牌是 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 了。依然满足每个栈只有 2 张牌。

posted @   FLY_lai  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示