Atcoder-Countings4
Atcoder-Countings4
[ABC231G] Balls in Boxes
Problem
有
。
Solution 1
由于题意中的期望与计数的转化只是一个
记
答案为
最后
接下来继续转化后面那堆抽象的
to be continued.
Solution 2
直接把答案写出来:
两个乘积式可以并在一起看:
对每个乘积项构造生成函数
此题暴力计算即可,当然可以加强到
Cookie Distribution
Problem
一共有
$ 1\ \leq\ N\ \leq\ 1000
Solution
ペアスコア
ジグザグな数列
Problem
给定一个长为
- 长度为
。 - 长度大于
,且 ,当 为奇数时, ;当 为偶数时, 。 - 长度大于
,且 ,当 为奇数时, ;当 为偶数时, 。
Road Development in Peterland
Problem
给定一个
对
Candy is Delicious
Problem
现有
- 不能选取两个相邻的糖果。
求
Erasure
Jumping over 2
Many Parentheses
One or All
Maximin Game
Problem
Alice 和 Bob 在玩一个游戏,初始时他们各有
游戏共进行
现以一个长为
Paint Red and Make Graph
色塗り
ティッシュ配り
[AGC026D] Histogram Coloring
Problem
给定
Solution
[ABC265F] Manhattan Cafe
Problem
在
如果一个点
给出
由于答案可能过大,你需要将答案对
Solution
有一个简单的 dp:设
这样做是
那就改写为这种写法:
: : 。 : 。
: : 。 : 。 : 。
: : 。 : 。 : 。
然后发现
[AGC058D] Yet Another ABC String
Atcoder:[AGC058D] Yet Another ABC String
洛谷:[AGC058D] Yet Another ABC String
Problem
给出 ABC
,BCA
和 CAB
。
Solution
可能是 OI 生涯做过最神仙的容斥。
对 极长 非法子串(以下简称非法子串)个数进行容斥,容易发现,非法子串一定形如 ...BCABCABCABCAB...
的循环形式。也就是说,如果一个非法子串的长度和末尾字符确定,该子串就可以被唯一确定。
我们以一个非法子串的最后三位确定其位置。取末三位是为了在计算时保证该位置一定作为非法子串的结尾。
记
然后确定这
假设一个末位置为
上述仅考虑了非法子串的末尾字符对非法子串方案数的影响。考虑非法子串的长度,可以反过来将所有非法子串的末位置确定,而剩下的
总结一下非法子串的方案数,为:
总答案为:
[AGC051D] C4(2807)
Problem
有一张
给定
你需要输出路径数对
Solution 1
省流:做不起。
官方题解的做法是 FFT 的
首先有一个阳间的结论:
你把从
一类游走对每条边增量为奇数,二类游走对每条边增量为偶数。结论显然。
考虑路径由这些部分组成:1.正常地走;2.在一条边上反复横跳。
反复横跳之后的结果是:一条边的遍历次数
这启发我们,是不是可以先考虑正常地绕圈,然后再这个过程中插入反复横跳?
这个想法是好的,但不容易描述出一个实际的做法。
而官方做法刻画出了一个人类智慧的路径形式,将一轮游走继续划分成更小的 “二段式跳跃”:
或 ,称为一类跳跃。 或 ,称为二类跳跃。 或 ,称为三类跳跃。 或 ,称为四类跳跃。
三、四类跳跃即是上文提到的反复横跳。但是你注意到,我们只考虑了将
这个思想对于事物的观察并不拘泥于事物的属性,而是如何寻求事物之间的和谐,构建一个奠基于事物而又超脱事物本身的整体。
是的,分散的反复横跳扰乱了一个简单的进程,而我们仍在思考一轮轮游走,看不透他们的存在。
当我们将混沌的游走肢解,一个不合理的刻画就此打破,而反复横跳被我们逐步包容。
我也曾在时间流速为一单位的四元环上反复横跳,可他们已经学会了用二单位的流速在其间穿梭。
我们可以重新去刻画一条完整的路径了。
首先确定一、二类跳跃。为方便叙述,我声称只有一、二类跳跃的路径是一条简单路径,而原路径被称为最终路径。
枚举一类跳跃走了
确定三类跳跃:我们惊喜地发现,
同理去确定四类跳跃。
然后整理答案。
注意一些细节:这里的
你发现我已经把答案化成了卷积的形式,直接用 FFT 优化即可。没有意义的项系数赋为
Solution 2
省流:还是做不起。
洛谷题解区以及场上大部分切掉的神仙的做法都是转成了欧拉路径计数。
Solution 3
省流:没必要省流了。
[ARC149E] Sliding Window Sort
Problem
给定正整数
- 对所有
依次做一遍如下操作:- 将
升序排序。
- 将
给定一个
Solution
[ARC057D] 全域木
Problem
给定
Solution
[ABC319G] Counting Shortest Paths(2185)
Atcoder:[ABC319G] Counting Shortest Paths
洛谷:[ABC319G] Counting Shortest Paths
Problem
经典问题:求补图的最短路,边权均为
Solution
每次从队列中把最早遍历到的节点
求最短路数量就很简单了,记
则
warning:不要同时遍历 set 和删除 set 内的元素。
[AGC023C] Painting Machines(2568)
Atcoder:[AGC023C] Painting Machines
洛谷:[AGC023C] Painting Machines
Problem
- 有一排
个格子,从左到右编号为 到 。 - 有
个机器,从左到右编号为 到 ,操作第 个机器可以将第 个和第 个格子染黑。 - 定义一个
的排列 的分数为,依次操作 ,第一次染黑所有格子的时刻。 - 求所有排列
的分数之和,对 取模。 .
Solution
好菜啊。
对每一步操作累计贡献,记
现在来求
立即想到可以进行 dp,但先别急,这个可以直接组合意义导出来。
套路地([ABC276G] Count Sequences)想到对位置进行 差分,记
[ABC248G] GCD cost on the tree(2514)
Atcoder:[ABC248G] GCD cost on the tree
洛谷:[ABC248G] GCD cost on the tree
Problem
给定一颗树有
的最大公约数。 求所有简单路径的贡献之和,对
Solution
最大公约数不太会处理,想到将
给每个赋点权
从小到大枚举路径上(当前质数的)
具体流程如下:
-
从小到大枚举 ,并称 的点 为关键点。在处理当前 的贡献之前,记录每个点当前所在连通块大小 及子树大小 ,并将所有关键点删掉,重新 建树以及 建立并查集。 -
记删点后每个点当前所在连通块的大小 以及子树大小 。计算点 的贡献:简单解释一下:记删点前点 所在连通块为 ,删点后点 所在连通块为 。用 内总路径数减去 内路径数,表示除开未经过关键点的路径。另外,还要去掉未经过点 的路径数,并把同时不经过关键点和点 的路径数加回来。 -
,重复上述过程。若不存在关键点,则结束质数 的贡献统计。
算答案的时间复杂度不会算,硬要不规范地表示出来是
吗的,第一句就爆了。
这下只能考虑直接枚举最大公约数的值了,记
套路地进行容斥:记
从
对于求
总时间复杂度为
question:写的时候才发现拉关键点的时候因为要遍历边,所以时间复杂度也许是假的。不太明白为什么能过。
[AGC028D] Chords(3491)
Problem
给定一个圆, 圆上均等地放着
两点联通当且仅当两点在同一条线段上或两点所属于的线段相交, 求所有连边方案中, 联通块的个数和.
Solution
圆上问题大胆转成序列上的线段问题,然后显然是区间 DP。
拆贡献,对每种连通块计算其被统计到的次数。然而一个连通块并不一定对应一个完整的区间,因此需要将其跨越的区间内的所有点都进行配对的方案数顺带进行计算。
记
记
直接 DP 不好做,考虑 容斥,先让
记
枚举包含
计算答案:对每个区间的带权连通块数进行二次计数:
本题的核心思想是 拆贡献 和 容斥,难点在于拆贡献的时候是一个 带权拆分。
[AGC058B] Adjacent Chmax(2053)
Atcoder:[AGC058B] Adjacent Chmax
Problem
给你一个
- 每次选择一个整数
( ) ,使 ,然后将 和 改为 。
求问最后可能得到多少种不同的结果,答案对
Solution
记
考虑
而我们在只考虑
[ARC106D] Powers
Problem
给定长度为
答案对
Solution
插播一个傻逼题。
记
[ARC166C] LU / RD Marking
Atcoder:[ARC166C] LU / RD Marking
Problem
给一个
有如下两种操作:
- 选一个上面和左面的网格线都没被涂黑的格子,并涂黑这两条线;
- 选一个下面和右面的网格线都没被涂黑的格子,并涂黑这两条线。
求执行两种操作若干次(可以为
Solution
插播一个没被傻逼做出来的题。
听说
将矩形按折线分割,让操作独立成若干个子问题。
设
若矩形边长为
[ARC167C] MST on Line++
Atcoder:[ARC167C] MST on Line++
Problem
给定正整数
给一个
个点的无向带权图,对于两点 ,当且仅当 时,它们之间有边,边权为 。
求这个图的最小生成树边权和。
对于所有可能的排列
Solution
插播一个没被傻逼做出来的题。
容易想到将
然后这里进行了一步不太显然的拆贡献。考虑 Kruskal 算法的思想是让 边权小的边数尽可能大:记
下面计算
从排列中选择
为了使这
然后有一个 naive 的 DP 做法:记
容易用前缀和优化至
然而官方题解用组合意义推出来了一个可以直接算
进行拆贡献,对
实际上它可以由上指标求和转化为:
从另一个组合意义上来讲,这相当于总方案数减去强行让关键点对不做贡献的方案数。
于是可以直接得到:
Matching
Problem
给定二分图,两个集合都有
求二分图完备匹配数,答案对
Solution
插播一道傻逼作业题。考虑对左侧点依次进行匹配,然后记录右侧点集还剩哪些点。
设
答案即为
但其实每轮枚举的有效的
[AGC016F] Games on DAG
Atcoder:[AGC016F] Games on DAG
Problem
给定一个
Solution
插播一道厉害作业题。
直接丢 粉兔的题解 吧。
チーム分け
Problem
将
两个分配方案被认为是不一样的,当且仅当存在两个人,在一个分配方案中被分在同一支队伍,而在另一个分配方案中被分在不同队伍。
Solution
插播一道 zr 题。
[ABC180F] Unbranched
Problem
求
-
图中无自环。
-
每个点度数最多为
。 -
所有连通块最多恰好有
个点。
答案对
Solution
显然每个连通块只能是链。
[AGC056B] Range Argmax
[AGC056F] Degree Sequence in DFS Order
[AGC039E] Pairing Points
[AGC033E] Go around a Circle
[AGC019E] Shuffle and Swap
[ARC124E] Pass to Next
Atcoder:[ARC124E] Pass to Next
Problem
有
接下来,他们会选择一些自己手中的球(可以不选),接着所有人同时将选中的球传给右边的人(这意味着别人传过来的球是不能继续往下传的)。我们令传球后第
令
求
Solution
记
这样一来,在
但是此题要求的是所有
我们尝试用
记
上面的操作将
现在问题在后面那坨式子,我们又设
代回
然后可以
再想想烦人的原因 ——
我们多么希望将
对于前者,初始化
对于后者,直接将
于是我们成功地破环成链了!!!只是这样的推导方式实在是有些生硬,颇有些碰运气的成分在里面。
题解区有另一种更加直观的组合意义做法,可以得到与上面相同的结果。
这种组合意义做法从根源上的差异在于,它这样看待答案的式子:
它的组合意义是:传球结束后,每个人从自己目前拥有的球中选择一个的方案数。
做法的突破口在于:选取的球只有两种可能 —— 自己原来拥有的;上一个人传给自己的。
于是可以设计 DP 状态
[ARC124F] Chance Meeting
Atcoder:[ARC124F] Chance Meeting
Solution
被 ARC124E 完虐后来 找点自信 继续找虐。
首先有个很显然的思路:枚举唯一相遇点
下记
然后我立马给出了一个错误式子:
直接这么算会计入不合法情况:
不过方便的是,当我们确定
又记
考虑 容斥 计算
具体地:
直接算是
很可惜,这个方法并不高妙。如果有大佬把上面的式子推出来了请教教我。
首先需要指出先前几个非常蠢的设定。
首先,下标从
以下定义下标从
其次,没有必要分设
以下定义
再次,之前的
之前的计算方式是:分别计算
然而
同时为了方便表述,称相遇的位置为关键点。
Idea 1
参考 这篇题解 的思路。
形式上,对
Idea 2
参考 这篇题解 的思路。
从另一个角度来观察我走向 Dead End 的原因,大概是没有 尽早进行容斥。如果直接对答案进行容斥,以下可见过程会明亮很多。
记
考虑一个要让一条路径只被贡献一次,此处进行了一步大胆的转化:一条路径的贡献拆成
前者枚举关键点位置,后者枚举相邻关键点对,对二者分别统计总数量,记作
前者正是我们最初想到的错误式子!此时体现了它的真正意义。我们还没有尝试过对其进行推导:
记
接下来算
简单解释:由于是枚举相邻点对,因此还要乘上卡特兰数(前文有叙述)。
很妙的一步转化是,把
类似地处理
求
记
把
那么就做完了!
本文作者:Schucking-Sattin
本文链接:https://www.cnblogs.com/Schucking-Sattin/p/17860600.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步