ARC 做题笔记 - ARC160~ARC164
1|0ARC160
1|1A. Reverse and Count
我日,差点被打爆了/xk。
暴力排序是
注意到我们每次按位比较。注意到会影响到这一位的翻转区间只有
Submission #48707910 - AtCoder Regular Contest 160
1|2B. Triple Pair
板子题。钦定
Submission #48708124 - AtCoder Regular Contest 160
1|3C. Power Up
也是简单题。考虑
Submission #48708772 - AtCoder Regular Contest 160
1|4D. Mahjong
从这里开始上了强度。
奇怪数数题先找点充要条件,一个什么样的序列是合法的?
首先注意到两个操作都不会改变模
然后注意到对同一个位置操作
注意到对一个位置做
但是有一个问题,我们如果做
现在问题变成了对操作计数。令
这样我们就有了一个
然后我死在这了/cf。
然后开始魔法。记
酷!这样答案就是
对前后进行一个二项式定理,然后暴力卷积状物暴力算组合数出系数。注意到你只需要算一项所以卷积的枚举量是
式子放在下面。
酷!
Submission #48709472 - AtCoder Regular Contest 160
1|5E. Make Biconnected
强度下去了/hanx。这个题评铜牌是不是有点高了。
首先进行一些观察,定义
下面我们考虑能否达到这个下界。
若
然后考虑
Submission #48711805 - AtCoder Regular Contest 160
1|6F. Count Sorted Arrays
恐怖题。
我们定义一次交换操作是有用的,当且仅当其至少让所有排列当中的一种排列发生改变。
考虑有效交换的次数。假设一次交换操作是
-
变为有效。此时
。注意到原来 现在由有效变为无效,抵消掉了 带来的贡献,所以总有效操作数量减一。 -
变为有效。此时
。注意到原来 现在由有效变为无效,抵消掉了 带来的贡献,所以总有效操作数量减一。
因此我们说明了有效操作的数量单调递减。这意味着有效操作只有
我们考虑对排列进行一些世界级映射。注意到每个排列恰好对应了
我们重写一下排列的判定条件。一个排列可以在若干次操作后排好序,当且仅当把路径上的每一个点看做
同时,我们可以暴力模拟每个点看做序列顺次执行交换操作后当前的序列是什么样子的,因此我们可以简单以的
最后我们需要判定操作是否有效。结合上面的结论,我们在每次执行有效操作后暴力重构所有
总有效操作次数为
Submission #48715812 - AtCoder Regular Contest 160
2|0ARC161
2|1A. Make M
比较简单的题。首先考虑是非严格大于的做法,那么我们把序列排序后劈成两半然后做类归并状物即可。
然后现在我们要相邻的不相等,那么我们把大的部分和小的部分全部从大到小排以后拼到一起即可,感性理解的话,让较大的和较大的匹配一定能使得相邻两个数的差尽可能大。
Submission #48347711 - AtCoder Regular Contest 161
2|2B. Exactly Three Bits
注意到答案一定从低到高是抹掉
Submission #48356115 - AtCoder Regular Contest 161
2|3C. Dyed by Majority (Odd Tree)
考虑给每个点钦定颜色,分为颜色不定,为白色和黑色考虑。从下到上 dfs 整棵树,把当前该节点的所有儿子中颜色不定的设为当前的颜色,设度数为
Submission #48426001 - AtCoder Regular Contest 161
2|4D. Everywhere is Sparser than Whole (Construction)
若至题/bobo。
如果
2|5E. Not Dyed by Majority (Cubic Graph)
牛逼题/pz。
注意到合法的解不会很多(我去哥们你咋注意到的),所以我们可以随机一个解,然后判定这个解是否合法。考虑判定一个颜色序列是否可以被构造。对于每一个点,如果其颜色为黑,则其周围点至少有两个黑点。令周围三个点为
关于合法的解占比的数量级,官方给出的估算是对于较大的
Submission #48447738 - AtCoder Regular Contest 161
2|6F. Everywhere is Sparser than Whole (Judge)
完全没看证明,所以写的东西比较意识流。
先判掉图不连通的情况。首先有最大密度子图转最小割的做法。记最小割为
Submission #48194665 - AtCoder Regular Contest 161
3|0ARC162
3|1A. Ekiden Race
比较唐的一个题。考虑一个人
Submission #48918643 - AtCoder Regular Contest 162
3|2B. Insertion Sort 2
注意到题面干的事情实际上是捆绑两个数做插入排序。因此我们考虑直接做插入排序,第
Submission #48929123 - AtCoder Regular Contest 162
3|3C. Mex Game on Tree
注意到 Bob 只会填
Submission #48934844 - AtCoder Regular Contest 162
3|4D. Smallest Vertices
很魔怔的一个题。
先想想本质不同合法无根树数量。这个是 Cayley 定理和 prufer 序那一套,那就是
然后我们考虑拆贡献。钦定每一个点
注意到很棒的一点是这个式子只和
Submission #48986816 - AtCoder Regular Contest 162
3|5E. Strange Constraints
神秘计数/yun。
考虑重写一下题意。我们要求第
设
这个复杂度乍一看是
Submission #48988259 - AtCoder Regular Contest 162
3|6F. Montage
考虑题面当中的那个限制,相当于是对于任意一个子矩形,如果左上右下均为
然后考虑合法的棋盘会长成什么样子。如果一个位置放上了
结合上面的四个推论,我们似乎可以推出一个更强的性质。对于一行,若存在两个不在同一段的
接下来继续考虑连续段的分布情况。注意到在删掉空行空列后,
Submission #49012565 - AtCoder Regular Contest 162
4|0ARC163
4|1A. Divide String
显然若
Submission #49033527 - AtCoder Regular Contest 163
4|2B. Favorite Game
注意到变化
Submission #49033642 - AtCoder Regular Contest 163
4|3C. Harmonic Mean
考虑初中数学。第一反应是裂项,但是最后补的
Submission #49033782 - AtCoder Regular Contest 163
4|4D. Sum of SCC
不会大套路题/ng。
竞赛图中强连通分量数等于把点集划分为两个集合
,且满足对于所有边 ,边的方向为 的方案数减一。
考虑证明。对于一个竞赛图,其缩点后一定为一个竞赛图 DAG,这个 DAG 有很强的性质是拓扑序固定,所以所有合法的分发一定是取拓扑序的一段前缀放到
因此我们直接开始对划分方案计数。
复杂度
Submission #49034510 - AtCoder Regular Contest 163
4|5E. Chmin XOR Game
更魔怔了这个题。
从二维情况入手,我们打个表先。
0111 1111 1111 1111 1100 1111 1111 1111 1010 1111 1111 1111 1001 1111 1111 1111 1111 1111 0111 0111 1111 1111 1100 1100 1111 1111 1010 1010 1111 1111 1001 1001 1111 0111 1111 0111 1111 1100 1111 1100 1111 1010 1111 1010 1111 1001 1111 1001 1111 0111 0111 1111 1111 1100 1100 1111 1111 1010 1010 1111 1111 1001 1001 1111
我们很难注意到这个图大图和子图同构。
然后我们考虑这个图当中先手必胜的位置。先观察一个子图。注意到先手必胜当且仅当
我们先考虑这样一件事,如果只考虑值域在
然后我们尝试证明同构这件事。注意到其前若干位相当于一次可以做也可以不做的转移。因此如果前若干位可以转移一次或多次,则先手一定可以通过在前若干位做先后手交换,因此先手必胜,剩下就是先手只能操作一次的,这样相当于直接做后两位。
注意到上述过程和
Submission #49035479 - AtCoder Regular Contest 163
4|6F. Many Increasing Problems
先考虑 Increasing Problem 怎么做,这是经典的 slope trick,我们每次在集合中加入两个
考虑经典套路,枚举一个值
然后考虑这个问题是什么,我们有一条折线,从
懒了,不详细写式子推导了,列几个我觉得比较重要的点。
相当于是要化简求和下式。
首先化简那个
瓶颈在那个等比数列求和后分治通分做求逆。复杂度
Submission #49046196 - AtCoder Regular Contest 163
5|0ARC164
5|1A. Ternary Decomposition
考虑一个答案的下界和上界,显然分别是
Submission #49211251 - AtCoder Regular Contest 164
5|2B. Switching Travel
考虑一个合法的回路是什么样的,注意到在不产生环的前提下,我们每条边如果能走一定只能走一次。先经过若干条边
Submission #49211650 - AtCoder Regular Contest 164
5|3C. Reversible Card Game
我们考虑把所有正面大于背面的数字视为
考虑第一个问题。我们注意到每一轮操作在存在
Submission #49211895 - AtCoder Regular Contest 164
5|4D. 1D Coulomb
首先考虑固定序列怎么求答案。由于小球相撞抵消电性不影响任意一侧小球对应方向的代数和,所以每个小球运动方向永远不变。答案相当于每个小球移动的路径长度和,我们不妨将每一对匹配的小球
考虑怎么应用到 dp 上。我们对上述做法略作改动,贡献提前计算,每次移动时将答案加上栈的大小。现在就有简单 dp 做法了。令
需要滚动数组,时间复杂度
Submission #49212447 - AtCoder Regular Contest 164
5|5E. Segment-Tree Optimization
考虑把整个序列看成一条链,在每一层中,我们可以选择当前区间的链,断开中间的一条边,然后将两条链下放到下一层中。而此时第一问的答案相当于是求出
然后考虑第二问。对上述断点建线段树后底层是若干区间,我们考虑一个区间会造成怎样的贡献。对于划分出的一个区间,我们要么直接放到上层,要么放到底层,然后和一个区间合并再挂到上层。有贡献的只有第二类。考虑这种合并会造成什么样的贡献。假设我们需要合并区间
时间复杂度
Submission #49213648 - AtCoder Regular Contest 164
首先注意到,每个节点上棋子被翻转次数是固定的。如果我们钦定根节点的深度为
而棋子最终的颜色只和被反转次数的奇偶性和初始时的颜色相关,所以这个问题可以被转化为如下一个等价问题。
给定一个
个点的树,每个点有红蓝两种颜色,根节点颜色为红色,每个节点的颜色和其父亲的颜色相反。两个人轮流在树上放黑白两种棋子,执白先手。每次挑选一个叶子,放上一枚棋子,并删去这个叶子。在蓝色节点上的棋子最终会变为对方棋子的颜色,在红色节点上的将会变为自己的颜色。双方的目标都是最大化自己颜色的棋子的数量,询问最终局面白色棋子的数量。
转化成这个问题最大的好处是让每个节点之间相对独立,现在节点间唯一的限制是放棋子的点只能是叶子。
同时,我们对白色棋子的数量换一种描述。设
考虑进一步简化局面。如果当前存在红色叶子,双方的策略显然都是先把棋子下在红色叶子上。因此我们可以看做是先把所有红色叶子丢掉,那么现在的局面变成了只有蓝色叶子的情况。我们称这种局面为简化局面一。
进行到简化局面一会有一些先后手的变换,为了避免混淆,我们下文中的先后手均指当前局面的先后手,用 Alice 和 Bob 代替原局面的先后手。
当只有蓝色叶子的时候,双方只能取蓝叶子。但如果先手结束操作以后,出现了一个红叶子,那么后手一定会直接取掉新生成的红叶子。这样先后手不变,后手净赚两个节点。
根据贪心策略,无论先手后手都一定会尽量避免这种情况的发生,也就是说,先手后手将尽量取那些不会产生新红叶子的蓝叶子,直到不存在这样的蓝叶子。我们称这种局面为简化局面二。
现在局面进一步简化。我们现在取任意一个蓝叶子都会使得一个新的红叶子生成。然后我们套用简化局面一去掉那个新产生的红叶子。此时局面走向了两种情况。一种是直接成为了简化局面二,另一种则是产生了不会产生新红叶子的蓝叶子。根据简化局面二的定义,只会产生一个这种蓝叶子。
我们进一步讨论简化局面二做一次操作后得到的局面。此时的先手一定希望尽量快的将自己变为后手(否则每一步均会亏两个节点),考虑什么时候先手才能达到这个目的,我们发现,先手能够达到这个目的当且仅当产生了不会产生新红叶子的蓝叶子。此时,先手取掉这个蓝叶子,局面成为简化局面二,且先后手互换。
我们称一个树上连通块是簇,当且仅当其由一个父亲度数大于
下面给出了一个簇的例子。
图中虚线部分构成了一个簇。注意灰色箭头指向的节点的子树不构成簇,原因是父亲度数不大于一。
根据贪心的策略,我们有猜想是,先手每次会取代价最小的簇,这个策略的正确性是非常容易证明的,因为先手每多做一次操作均会导致两个节点的亏损。严谨证明可以参考 Atcoder 的官方题解,这里不再赘述。
根据这个猜想,我们得到了这个题的多项式做法,首先把局面变为简化局面一,然后按照每次取出最小的簇,删掉,贡献答案,交换先后手,重复操作直到树被删空。特殊的,当树中不存在簇时,我们认为剩下的节点为一个大簇。时间复杂度
考虑降低这个做法的复杂度。我们从下向上划分簇。对于每个蓝色节点,其可能成为一个簇的根节点,我们将其放到父亲红色节点考虑。而对于红色节点,按照上述策略,其将保留最大的那个簇向上传递到其父亲,同时确定其余簇的形态。我们容易使用排序完成这一过程。时间复杂度
下面描述了一个簇的划分过程。
图中的所有绿色部分为确定的簇,黄色部分将随红点继续上传参与以其祖先节点为根的簇的构成
同时,为了减少代码细节,我们将单独的红色叶子看为一个代价为
综上,我们在
Submission #49217443 - AtCoder Regular Contest 164
__EOF__

本文链接:https://www.cnblogs.com/-Complex-/p/17958150/ARC160-ARC164.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!