CF1427F-Boring Card Game【贪心】
1|0正题
题目链接:https://www.luogu.com.cn/problem/CF1427F
1|1题目大意
有一个的序列,两个人轮流操作,每次取走连续的三个数字。
现在给出先手取走的数字集合,要求构造方案。
保证有解
1|2解题思路
我们给先手取的颜色标为,后手的颜色标为。
我们考虑一下能不能求出哪些牌是在一次中取走的,这个取法很像一个括号匹配,也就是一次取走的东西中不会产生交叉,而如果不会产生交叉,那么我们按照括号匹配的找法去找也是对的。
所以我们可以用一个栈存按顺序存牌,当栈顶三个颜色相同时就弹出这三个,表示这三个是在同一次中取走的。
并且我们还能建立一些依赖关系,形如取走之前必须,这些依赖关系能构成一个森林。
现在相当于给出这样一棵森林,每次取走一个叶子,要求颜色是交错的。
我们找一下这个森林的性质,会发现每个节点的颜色都和父节点的不同,还有和的数量相等。
一种取法是和都随便取,但是必须留下一个根到最后取,现在我们证明这种取法的正确性:
首先如果用这种取法正确,那么一个有解的状态就是存在一个为的根并且存在一个当前要取的颜色的叶子。然后我们证明所有有解状态都能转移到有解状态即可。
-
假设现在要取,那么此时数量相同。假设随便一个后就没有了的叶子,此时的数量比多,并且有一个为的根,因为没有为的叶子,应该每个都能找到一个为的儿子,但是的数量比多,所以显然不合法,假设不成立。
-
假设现在要取,那么此时取走随便一个不是最后一个根的后数量相同,假设此时没有为的儿子。我们每个去找儿子中的一个,理论上也应该找得到,但是因为有一个是根,所以至少有一个找不到这样一个儿子,所以假设不成立。
所以我们的取法就是除了最后一个为的根以外其他的都随便取。
时间复杂度:
1|3code
__EOF__

本文链接:https://www.cnblogs.com/QuantAsk/p/16573907.html
关于博主:退役OIer,GD划水选手
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2021-08-10 P7737-[NOI2021]庆典【tarjan,虚树】
2021-08-10 P5494-[模板]线段树分裂
2021-08-10 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)部分题解
2021-08-10 jzoj7212-[2022省赛]染色(color)【根号分治】