AtCoder 比赛记录
ARC 140
打得很烂。Rank 590,Performance 1696。
D - One to One
每个点都有恰好一个出边,所以这是一个外向基环森林。因此连通块数就等于环的个数,我们只需要求出所有方案中环的个数的总和。直接算比较难办,考虑算每个环对答案的贡献。
首先,假如忽略掉
假如我们任取
时间复杂度
ARC 141
Rank 164,Performance 2313。
A - Periodic Number
我做麻烦了。首先,假如
ABC 260
Rank 167,Performance 2305。
G - Scalene Triangle Area
在
++++++
++++00
++0000
000000
二维差分后,得到:
+00000-0
0000-0+0
00-0+000
-0+00000
相当于在
最终再做一次二维前缀和即可。时间复杂度
AGC 058
Rank 106,Performance 2722。
A - Make it Zigzag
喜报:我的做法被我自己叉了!
以下是正确做法:
考虑第一个不合法的奇数位置
- 若
,则交换 ; - 否则,交换
。
偶数位置同理。每次操作会使得第一个不合法的位置至少后移两位,因此操作次数
B - Adjacent Chmax
对于每个位置
现在,问题转化成了:对于每个
设
D - Yet Another ABC String
考虑容斥。将 ABCABC...
的子串,设其中有
枚举 ABC
,BCA
或 CAB
均可。对于在中间的一段,因为我们需要保证每段都是极长的,所以这个段的开头三个字符只有两种填法。若开头的长度
时间复杂度
ABC 266
Rank 85,Performance 2400。
Ex - Snuke Panic (2D)
设
其中
将绝对值拆开,得到:
注意到
ARC 148
Rank 540,Performance 1803。
D - mod M Game
设给定的数集是
那么 Alice 必败。此时我们需要有
可以发现,若
此时,分
- 若
是奇数,只需检查 中是否有剩下的数即可,若有则 Alice 必胜,否则 Bob 必胜。 - 若
是偶数,将所有 的 分为一类,若存在一类中的数的个数是奇数,或者总的类数是奇数,则 Alice 必胜。否则 Bob 必胜。
E - ≥ K
将
我们维护两个指针
- 令
; - 若
,则令 ; - 否则,令
。
最后,我们令
这个算法的正确性是显然的,但我很好奇这是怎么想到的。
ARC 150
Rank 316,Performance 2127。
D - Removing Gacha
考虑每个点期望被选的次数,将它们加起来就能得到答案。考虑一个点
现在我们是在这
ARC 151
Rank 220,Performance 2286。
D - Binary Representations and Queries
对于任意两个操作
证明:不妨考虑
于是我们将所有
AGC 059
Rank 395,Performance 1991。
A - My Last ABC Problem
首先考虑对于单个字符串
对于多组询问,预处理前缀和即可。
B - Arrange Your Balls
设
考虑一个将数字插入进环的过程。每次插入一个以前没插入过的数时,都会使答案至少增加
将所有种类的数按照出现次数从大到小排序,并按这个顺序插入。假如当前我们要插入
用链表维护这个过程即可,时间复杂度
C - Guessing Permutation for as Long as Possible
对于一个询问
上述条件也是充分的,证明比较显然。
考虑将每个询问
; 。
于是直接拿并查集维护,如果
AGC 060
Rank 281,Performance 2175。
A - No Majority
题目给的条件可以转化成,不能有相邻且相同的字符,且连续三个字符中不能有相同的。于是直接 DP 即可,时间复杂度
B - Unique XOR Path
考虑给定的这个字符串 RD
,那么可以将其变成 DR
,这样得到的路径与 D
和 R
,那么就可以形成 No
。否则,答案一定是 Yes
。
C - Large Heap
考虑从小到大填数的过程,在任意时刻,已经填过数的节点都会形成连通块。于是设
其中
其他子树中的点显然不影响,只需要考虑
最后考虑答案。枚举当最后一次操作恰好是填
ARC 153
Rank 73,Performance 2699。
C - ± Increasing Sequence
单调递增的限制看起来很烦。考虑这样的转化:令
记
; 。
并且,这样转化后的
ABC 288
Rank 96,Performance 2400。
G - 3^N Minesweeper
非常好题目。
类似于做 FMT 的方式,我们从高位到低位逐一确定。设
代码:https://atcoder.jp/contests/abc288/submissions/38626637。
Ex - A Nameless Counting Problem
非常好题目。
定义合法序列是满足如下条件的整数序列:
- 其中每个元素均在
中; - 所有元素的异或和是
。
注意到若
于是只需要考虑如何算
再减去包含重复元素的合法序列个数,设:
- 序列中有
个出现了奇数次的元素; - 序列中有
种出现了奇数次的数字; - 序列中有
种出现了偶数次的数字。
那么这个序列有重复元素,当且仅当
其中
对于所有的
上述所有过程中,只有
代码:https://atcoder.jp/contests/abc288/submissions/38666417。
ARC 156
Rank 78,Performance 2658。
C - Tree and LCS
每次剥一层叶子,并把这些叶子的
这样,题目中定义的 similarity 就至多是
ARC 157
Rank 270,Performance 2188。
D - YY Garden
考虑枚举横着放 Y
的个数 Y
的个数
设 Y
的个数是
E - XXYX Binary Tree
由于 XX
的限制。
因为不能出现 YY
,如果一个非叶子节点是 Y
,那么它的两个儿子和父亲都需要是 X
,这样贡献两个 YX
和一个 XY
。如果一个叶子节点是 Y
,那么它的父亲需要是 X
,贡献一个 XY
。
所以设有 Y
,Y
,那么 YY
,这个条件就是充分的了。
所以可以 DP。设 Y
,且点 Y
的情况下,子树内最多能有多少个叶子节点是 Y
。
时间复杂度
ARC 158
Rank 80,Performance 2672。
D - Equation
设
注意到
于是,
只要
根据官方题解中的证明,只需要直接随机
ARC 159
Rank 185,Performance 2329。
C - Permutation Addition
首先考虑有解的必要条件。设
考虑如果所有
于是每次选择
E - Difference Sum Query
题面写得很抽象,但其实就是在做一个类似于二分的东西。考虑建出一棵二叉搜索树,当我们二分到一个深度为
这样,
所以
; 的路径上所有编号不在 间的点。
于是我们只需要算出
由于保证了
F - Good Division
比较套路的题。
首先,某一段可以单独成段,当且仅当其长度为偶数,且其没有绝对众数。
于是设
考虑绝对众数的那个套路。枚举一个绝对众数
但这样有一个问题,就是当前
考虑把所有这些连续段离线下来做扫描线。对于每个位置,我们先处理它上面记录的加入、删除操作,然后枚举现在仍然存在的每个连续段,并在这个连续段对应的树状数组上修改和查询。
由于所有连续段的长度之和是
ARC 127
赛时做出 ABC,赛后做出 D。
C - Binary Strings
逐位确定。首先第一位一定是
于是只需要实现把
D - Sum of Min of Xor
考虑最高的那一位
把所有下标
根据
时间复杂度
E - Priority Queue
首先考虑,如果给定剩下的数的集合
把所有
位置的权值设为它前面(包括它本身) 的个数,然后顺序考虑所有 ,对于每个 把它前面最后一个 删掉。设剩下的数的权值依次是 。
合法,当且仅当 。
证明可以感性理解。根据这个定理直接进行 DP 即可,时间复杂度
ARC 149
赛时做出 ABC。
D - Simultaneous Sugoroku
牛逼题。
设
维护区间
顺序考虑这
在最后对连边形成的树进行一遍 DFS 即可。时间复杂度线性。
E - Sliding Window Sort
硬刚了三个半小时做出来了。
首先考虑
这个交换操作并不会影响什么,于是先考虑
可以发现:对于
现在还有最大的
再讨论一下
时间复杂度
F - Rational Number System
首先考虑,如果给定正整数
非整数进制的一个很大的麻烦是,它的一个表示
也就是说,可以用这样的方法生成所有正整数:从数字
这个生成的过程形成了一个 Trie 的结构,并且这棵 Trie 的 BFS 序一定是
现在我们知道了字典序第
总结:
- 要尽量往经典的结构上想。比如这题的 Trie,再比如 ARC159E 的二叉搜索树。
- 想不出来性质的时候可以画一下这些结构。
ARC 146
赛时做出 AB,赛后做出 D。
C - Even XOR
设
假如现在有一个合法集合
考虑一个性质:对于任意两个
于是,对于一个大小为
其中
D - >=<
因为限制是双向的,所以先把每个限制都拆成两个。
如果不存在
于是考虑一个形如
- 对于那些满足
的限制 ,我们需要限制 ; - 对于那些满足
的限制 ,我们需要限制 ;
继续递归考虑这些限制,直到所有限制都处理完。此时,如果某个
因为每条限制都只会被考虑
E - Simple Speed
为啥我没想出来!!!
如果想到了转化成折线,那么就输了。
考虑直接做。从小到大考虑每个
不妨仅讨论一下那种左右端点处不插入新数字的情况。此时,设
其他情况的转移是类似的。
并且,注意到
ARC 145
赛时做出 ABC,赛后做出 D。
D - Non Arithmetic Progression Set
我的做法
先不考虑那个和为
最后,设
但可以打表。预先随机出来一个大小为
代码长度 144KB,感谢 AtCoder 宽松的代码长度限制。
官方做法
考虑构造
最后我们需要让
ARC 160
Rank 188,Performance 2285。
D - Mahjong
考虑如何判断一个序列
设
于是就可以计数了。对
E - Make Biconnected
首先,所有叶子节点一定需要选至少一次,因为如果有某个叶子没被选,那么与它相连的那个点就一定是割点。设叶子个数为
- 有偶数个叶子:一定能找到一个非叶子节点
,使得以 为根时, 的所有儿子的子树中叶子节点的个数都不超过 。这样就一定能给每个叶子节点 找到一个与它配对的叶子 ,使得 。 - 有奇数个叶子:枚举一个叶子
,对于剩下的 个叶子用上述方法配对。考虑找到 往上的第一个三度点 ,那么 能和除了 路径上的点以外的所有点配对。选取其中点权最小的即可。
F - Count Sorted Arrays
题目给的这种形式相当于一个简单的排序网络。根据排序网络的结论,如果我们需要判定排列
- 第
个 序列是:将 中所有值 的位置标记为 ,其余位置标记为 。
从另一方面,对于两个长为
那么,对于一次操作
假如一个
时间复杂度
ARC 161
赛时做出 ABD。
C - Dyed by Majority (Odd Tree)
从剥叶子的角度考虑会有很多细节,所以不妨直接考虑 DFS。一棵子树的根节点有可能会要求其父亲是某种颜色的。在 DFS 过程中检查这样的染色是否合法即可。
E - Not Dyed by Majority (Cubic Graph)
由于题目要求的是不能被生成出来的颜色序列,所以猜测这样的颜色序列个数一定很多,可以直接随机然后用 2-SAT 判断。
F - Everywhere is Sparser than Whole (Judge)
先考虑有没有一个子图的 density 大于
那么考虑
其中
这个式子的形式与 Hall 定理完全相同。于是,考虑这样一个二分图多重匹配建模:左部
再考虑有没有一个
根据二分图匹配的可行边与必经边那套理论,这样的
ARC 162
Rank 46,Performance 2848。
F - Montage
通过打表,可以发现合法的
- 若干行、若干列全是
; - 去掉全
的行列后, 的位置是 和 ,其中 ,且 。并且,对于每个 都有 。
我们先不考虑全
设
直接做是
ARC 155
赛时做出 BC。
A - ST and TS Palindrome
当
可以约掉一部分,变成
D - Avoid Coprime Game
对于一个固定的
设
如果不存在一个
处理
E - Split and Square
当集合
当
求出
作者:alan-zhao-2007
出处:https://www.cnblogs.com/alan-zhao-2007/p/atcoder-contest.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2022-01-01 P4619 [SDOI2018] 旧试题 - 数论