Solution Set - 数学相关

CF645F

Link&Submission.

利用 d|nφ(nd)=n,只要对每个数 x,求出 cntx 表示 x 的倍数数目,然后 xφ(x)Ccntxk 就是答案。每加入一个数进行修改,O(n) 枚举因数即可。

CF724G

Link&Submission.

考虑一个连通块。随便取一棵生成树,则每条非树边带来一个环。从 uv 的某条路径的异或和就等于生成树上 uv 的路径的异或和再异或某些环的异或和。所以把所有环的异或和放进线性基,假设这线性基的大小是 c。然后按位考虑,假设根到各个点路径的异或和中,第 i 位上有 x1y0。如果线性基中没有数的第 i 位是 1,那么这个连通块的这一位的贡献是 xy2i+c。如果线性基中有数的第 i 位是 1,则随便丢一个数和线性基中的数异或,第 i 位上一定是一半 0 一半 1,这时这一位的贡献就是 (x+y)(x+y1)2i+c2。求和即可。

CF1034C

Link&Submission.

设所有点权的和是 S。考虑最终分成的块数,假设是 k,则每一块的和都是 a=Sk

可以给出唯一的一种构造:做拓扑排序,如果一个点的点权小于 a 则加到父亲,如果大于 a 则无解,如果等于 a 则不操作(相当于割掉了该点与父亲的边)。所以对固定的 k,终态要么不存在,要么唯一。

假设已经求出了 fk=0/1 表示是否存在合法终态,则可以做DP:dpi=fi(d|i,didpd+fi) 表示最终分成 i 块的方案数(考虑到可以多次的限制)。那么问题就变成求 fk

用上面给出的构造求 fk 是不直接的,换一个思路。假设一个点 u 和父亲间的边被割断了,则 u 点的子树和 su 一定是 a 的倍数。由于分成 k 块,所以是 a 的倍数的 su 应该至少有 k 个(有一个点是根,虽然它没有父亲)。另一个几乎显然的事情是至多有 ksua 的倍数。所以 fk=1ksua 的倍数。

又有 a|suS|ksuSgcd(S,Su)|k,所以直接统计 Sgcd(S,Su) 所有不超过 n 的倍数就可以了。至于时间复杂度,DP是单 log 的,后面这个统计显然没什么问题。

CF1603D

Link&Submission.

显然 c(l,r)rl+1,则 f(n,k)n。当 r<2l 时,c(l,r)=rl+1,所以当 n<2k 时,f(n,k)=n。这样 k>20 都不用考虑。

一般情况下,f(n,k) 显然可以 DP 求:f(n,k)=minmn(f(m,k1)+c(m+1,n))。我们尝试用四边形不等式把这个 DP 优化到 O(nklogn)

我们有

c(l,r)=x=lrd|x,dlφ(xd)

c(l,r)c(l+1,r)=x=lr[l|x]φ(xl)=x=1rlφ(x)

从而

c(l,r)=i=lrx=1[ri]φ(x)

有了这个式子,预处理 φ 的前缀和,可以用整除分块在 O(r) 的时间内求出 c(l,r),实际跑不满。同时我们可以证明 c 满足四边形不等式,这是因为

c(a,d)c(b,d)=i=ab1x=1[di]φ(x)

固定 a<b,这个函数显然是关于 d 单调不减的。

那么直接用分治优化即可。

CF1770F

Link&Submission.

神仙题。

首先由于对称性,我们知道 ai=t 的满足条件的序列数与 i 无关。则 n 为偶数时答案肯定是 0

第二个想法是考虑容斥。假设长为 n,和为 x,按位或是 y 的子集(二进制下,下同)的所有数列异或和的异或和是 g(y),容易证明原问题的答案是所有满足 yy 的子集的 g(y) 的异或和。

问题转化为求 g(y)。按位考虑,因为已经假设了 n 是奇数,所以只用判断 a1 的第 i 位是 1 的情况数是不是奇数。同时还要求按位或是 y 的子集。

先计算长为 n,和为 x,按位或是 y 的子集的数列数目。可以列出一个式子:a1++an=xi=1n[aiy]。看起来没什么意义,但是联想到 Kummer 定理的推论:Cnm 是奇数当且仅当 mn 的子集。所以上面这个式子就同余于 a1++an=xi=1nCyai。而这个式子是范德蒙恒等式的 n 元情形,它就等于 Cnyx

对于 a1i 位是 1 的限制,会发现要求变成了 a12iy2i 的子集(当然还要求 y 的第 i 位等于 1),所以上面那个组合数会变成 Cny2ix2i。如果它是奇数,那么对答案贡献 2i(异或)。

综上,枚举 iy 即可。这里的 y 是题目中 y 的子集。

CF1656H

Link&Submission.

重写目标,我们需要找到两个非空集合 A{1,2,,n},B{1,2,,m},满足 lcmiAai=lcmjBbj

这个目标等价于(记 P 为质数集)

pP,maxiAvp(ai)=maxjBvp(bj)

这个式子又可以变形为

pP,iA,jB,vp(bj)vp(ai)

pP,jB,iA,vp(ai)vp(bj)

两个条件分别等价于

iA,lcmjBgcd(ai,bj)=ai

jB,lcmiAgcd(ai,bj)=bj

接下来来设计算法的整体框架。初始令 A={1,2,,n},B={1,2,,m}。如果发现某个 iAjB 使上面的条件不成立,那么就删去它,它肯定不能存在于最后的答案中(显然删掉更多不会让它可行)。删到不能再删为止,如果此时删空了一个集合就表明无解,否则留下的就是解。

n,m1000,我们可以在删去一个数的时候暴力枚举另一个集合中的数,计算影响。但是 lcm 并不可减,因此可以使用一个线段树维护,删掉一个数就把对应位置改为 1,用全局 lcm 比较即可。

时间复杂度 O(n2lognlogV)(视 n,m 同阶),在这题 10s 的时限下不是问题。

CF986F

Link&Submission.

显然只需要考虑 k 的素因数。

如果没有,显然为 NO。

如果只有 1p0,判断 n 是否是 p0 的倍数即可。

如果恰有 2p0,p1,用 exgcd 判断即可。

如果至少有 3 个,则最小的一个 p0k13105。考虑经典的同余最短路模型,把 0,1,,p01 看作点,对每个素因数 pi,从 i(i+pi)modp0 连边,边权为 pi。则能凑出 n 的条件是 disnmodp0n

使用 dijkstra 求最短路可能超时,但其实不需要,因为模运算具有良好的性质,所以可以钦定先走边权 p1 的边,再走边权 p2 的边,以此类推。对于每个 pi 会把整个图连成一个环,在环上转两圈更新最短路即可。

posted @   by_chance  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示