标签:牌堆 ... 每堆 Qingshan RBRB 链表 同色 CF1495E
\(n\) 堆牌形成一个环每堆是红牌或蓝牌。从 \(1\) 号堆出第一张牌。以后每张牌出之前这种牌顺时针最近的且不同色的牌。求最后每堆牌出了几张。
首先把第 \(1\) 堆出了,以后每次出牌必然是一段同色段的第一张。
不分析性质的暴力模拟(链表做法):把所有同色段合到同色段里第一堆,用第一堆的内嵌链表存储。每次找到全局最小牌堆 \(x\),全局减 \(x\),同色段合并,也用链表(链表套链表)。
有个细节就是由于 \(1\) 出了所以每次优先出牌权在与 \(1\) 不同色的堆中。最后如果不同色的堆有剩余,把 \(1\) 顺时针最近的一堆减 \(1\)。
优化到 \(\Theta(n)\):每次找一个 \(\le\) 左右牌堆的牌堆(找的过程可以用 bfs 取队列顶),然后把它清空并且把右边的牌堆减去它的牌数(顺着链表减,一个原来的堆减没了就从链表中删除下一堆),然后把它左右合并。
正解做法:设颜色为 R
和 B
,且 R
的牌数 \(\le\) B
。最后 R
肯定全出完了。最后出牌序列是 BRB...RBRB
或 RBRB...RBRB
,取决于 \(1\) 的颜色。于是如果是 BRB...RBRB
,就先让 \(1\) 出牌,然后把牌权给下家。然后现在就相当于所有 R
出牌会让下家 B
出牌。执行顺序就不重要了。于是直接跑(最多两圈),遇到 R
出空拿手上,遇到 B
把手上牌拿出来消掉对掉即可。
最后压缩输出的时候爆 long long
,我流汗黄豆。
标签:牌堆,...,每堆,Qingshan,RBRB,链表,同色,CF1495E 来源: https://www.cnblogs.com/Pizza1123/p/16688803.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。