P8866 [NOIP2022] 喵了个喵

原题

看了三遍忘了三遍,后来决定写博客

首先看k=2n2的情况,显然我们只需要空出一个栈,如果牌堆里的牌在栈顶出现过,则直接消去;如果牌堆里的牌在栈底出现,则我们把牌放到空栈中后再消去即可


然后我们考虑k=2n1的情况,我们考虑一直延续k=2n2的思路,即尽量让栈保持n1个满的状态

  1. 如果牌堆中的数已经出现过,我们直接把他消掉

  2. 否则找到后面第一个ai为堆底的位置,如果ai所在的堆的堆顶在牌堆顶到ai出现了奇数次,则这个数可以直接被消掉,我们把牌堆顶的牌放到空栈里;否则ai所在堆的堆顶不能被消去,但偶数个会互相抵消,而且把ai放到空栈里ai会被消去,我们把牌堆顶的牌放到ai所在堆堆顶即可

被cm+搏杀了,已经可以AFO了

posted @   FOX_konata  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示