Solution Set - 组合计数
CF40E Number Table
显然 奇偶性不同时无解。奇偶性相同时,假设有一行全为空,剩下每行至少一个有空,则除这些位置外没有限制的位置都可以随便填,这些位置一定有唯一可行方案。又因为 ,所以一定有一行或一列为空。假设是一行,如果有其它行全满,检查乘积是否为 ,不是则无解。是的情况可以直接忽略这一行。最后统计有多少可以自由选择的位置,假设 个,答案就是 。
CF140E New Year Garland
先考虑如果放 个球的一行恰好出现 种颜色的方案数。这里固定这 种颜色的集合。可以使用 DP,记答案为 ,转移为
前一项乘 是选择 种颜色的集合,后一项乘 是保证相邻两个不相同。
再考虑总的方案数。定义 为已经填好前 行,第 行恰好 种颜色的方案数。则
通过预处理一行的和可以做到 。注意要开一个内存池存 数组,而且这题模数不一定是质数,可以通过计算模数的各个质因数幂次预处理组合数。
CF482D Random Function and Tree
一眼树形 DP。定义 表示以 为根的子树中染奇数/偶数个点的方案数,偶数的情况允许不染。分奇偶是因为染色跟奇偶性有关。转移 时,定义一个辅助的 DP 数组 表示已经考虑了 前 棵子树,染奇数/偶数个点的方案数。 很好转移,最后 。当然有些情况是子树正序排列和倒序排列染色相同的。如果总数偶数,是若干棵子树选偶数个点;如果总数奇数,是奇数棵子树选奇数个点(剩下的子树不选)。前者直接乘法原理,后者再做 DP, 表示前 棵子树中,奇数/偶数棵子树选奇数个点的方案数。很好转移。
CF325E The Red Button
为什么这里会有一道构造题啊
手玩容易发现奇数无解,证明很简单,因为每个点入度为 ,而对 ,有边 ,这样 不管走向哪里都不行。
可以猜测偶数是有解的。记 。然后发现一个事情: 和 的两条出边的终点是相同的。那可以先随便分,分完之后构成若干个环。如果整个图不止一个环,一定有一个 , 和 不在一个环里。这个结论不太明显,但证明很容易:反证,如果不是,那么 都在一个环里,然后就可以从 开始依据二进制走到所有点。有这一条之后,用并查集维护每个点所属的环,扫描所有 ,如果发现不同就交换,合并并查集。
CF896D Nephren Runs a Cinema
假设有 个 50, 个 100, 个 VIP,则最后留下 个 50。
熟知利用折线法可得: 个 50, 个 100,总能够找钱的方案数是 。则上面 情况的方案数就是 。
固定 求和,有 ,答案就是 。 计算即可。
注意模数又不是质数,同样通过算质因子处理。
CF698F Coprime Permutation
观察一:相同质因数集合的数可以交换。
观察二:如果两个质数在 中的倍数数目相同,可以交换这两个质数的所有倍数。
感觉这两个条件差不多了,那就差不多吧。也就是我们猜测这两个条件与题目条件充要。
根据题目中给出的一些位置,我们可以得到观察二中的交换关系。当然要判断这样交换是否合法。另外还要判断质因子集合的大小是否相同,毕竟这是一个不变量。对于观察二中的质数,显然会大于 ,所以只用考虑每个数的最大质因数。
判断合法后,我们可以知道对于某个质因数集合,有多少个数可以自由交换;同时我们也知道对于倍数数目相同的质数,有多少可以自由交换。把这些数的阶乘乘起来就是答案。
CF981H K Paths
按照被所有路径覆盖的边分类,它们当然也构成一条路径 。考虑所有路径在 一侧的端点。删掉 得到一些连通块,设不包含 的所有连通块大小为 。每个连通块内至多有一个路径端点,剩下如果有还没有分配的端点都只能是 。路径有顺序,其实等价于两侧端点各自排列数的乘积。则 这一侧的排列数就是
把给出的树看成有根树,定义 表示 子树内上式的值(或者说对路径 在 一侧的排列数), 表示子树外(在 一侧)。所有路径分成两类:祖先-后代链和其它。
对后者,总数是 , 没有祖先后代关系。让每对 在 LCA 处产生贡献。定义 是 子树内所有点 值的和,则 处的贡献是 。
对前者,在链的祖先端点产生贡献, 的贡献是 。
剩下的问题是如何来求 。上面那个式子是不太好维护的,所以考虑直接求出 。显然它是多项式 的 次项的系数。来求 的展开式,用分治+NTT解决。一次求解的复杂度是 ,用这个方法求所有 的复杂度是 。
相当于 换了一个一次因式,那么可以 暴力除掉原来的因式,再乘上新的因式。这样可能被菊花图卡到 ,所以再做优化:同样的因式只算一次。也是蛮经典的套路了,因为 ,所以不同的 的个数是 级别的,那么单次时间复杂度降到 。求和是 。
注意 需要特判。
CF750G New Year and Binary Tree Paths
感觉没有3200。
假设 到 的路径和为 , 的 LCA 为 。固定 ,设 的深度为 ( 的深度为 )。再固定 的深度 ,放缩一下可以感觉到,如果 固定了,那么 至多一个。
事实上,做一下计算,固定 时,路径和最小值当然是 不断向左 次(算上 经过 个点), 不断向左 次;最大值是 不断向右 次, 不断向右 次。可以算出此时路径和的取值范围是
那么这个式子就证实了刚才的感觉。
枚举 ,计算 ,假设 离上面的左端点还有 。我们把路径的两个端点在相应的层右移。找规律会发现,从一个点开始不断右移,它到根的距离增加量是这样一个数列:。第 项是 。对它求和得到,如果 是 子树内这一层的第 个点,则 到 的路径的总和比这棵子树内第一个点增加了 。这里 分别表示 中 的幂次, 在二进制下 的个数。
所以我们只要解一个方程:。 就代表了左右端点分别是第几个,范围限制是 。
会发现 ,所以考虑枚举 ,可以算出 。对于这个问题 DP 解决, 表示已经填好了 的最低 位,其中填了 个 ,下一位有没有进位。递推是容易的。
时间复杂度的一个上界是 ,但根本跑不满,最后跑的飞快。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具