Solution Set - 数论相关

绝了,六道题都差一步想出来或者差一个细节就开始看题解。

CF906D

Link&Submission.

要求 abmodp,那就要求 bmodφ(p)。从这个思路开始往后迭代即可。φ(p) 迭代到 1 的次数大概是 logp 级别的,所以时间复杂度正确。注意扩展欧拉定理的正确运用。具体实现直接往后枚举即可,写成递归可能更简单。

CF1562F

Link&Submission.

发现询问次数和 n 很接近,那应该考虑找到一个比较特殊的数,对它和序列中所有数进行询问。这个数当然是大质数最好。

如果序列中没有大质数,则长度不会太长,最长大概在 90 左右。而 n100 的时候都可以对所有数对做询问,询问之后每次找到还没确定的数中产生的最大 lcm,它一定是最大的两个数产生的。

如果序列中有大质数,需要找到它。不好准确定位,那就考虑随机化。计算会发现找到的概率还是很大的。先进行 4999 次随机询问,然后找到回答的最大质因子最大的一次,就可以假设它的最大质因子是我们想要的大质数。再取一个数和这次询问的两个数询问一下,确定哪个是大质数。再做 n1 次询问确定所有数即可。

CF1698G

Link&Submission.

会发现问题可以转化成模 2 意义下的多项式乘法。给定的 s 序列丢掉低位 0 就是一个多项式 f,在无穷序列上异或的位置构成另一个多项式 g。最后要求 f×g=xn+1n 最小。那也可以写成 xn1(modf),这里等号都在模 2 意义下。对后面这个式子BSGS即可。

CF516E

Link&Submission.

显然只用考虑 n,m 互质的情况。不互质时除掉最大公约数,注意会有一些 corner case。下面来考虑互质的情形。

假设有一个编号为 i 的男生开始就快乐,那第 i 天他让 imodm 号女生变快乐,第 i+cn 天他让 (i+cn)modm 号女生变快乐。那么我们可以认为是第 imodm 号女生用了 cn 天使得 (i+cn)modm 号女生变快乐。更简单一点,如果 j 号女生某一天变快乐了,j+n 天后她会让 (j+n)modm 号女生变快乐。

这时可以类似同余最短路的模型建图,从 j(j+n)modm 连边权为 n 的边。这些边构成一个大环,剩下还有一些边:如果 i 号男生初始快乐,则第 i 天开始 imodm 号女生快乐,所以从源点向 imodm 号女生连边权为 i 的边;如果 i 号女生初始快乐,从源点向 i 连边权为 i 的边。然后要求源点到所有点的最短路中最长的一条的长度。注意到有一个大环,环上边权相同,剩下的边数目不多,所以按照环上顺序排序求解即可。

CF1225G

Link&Submission.

考虑每个数被除的次数,也就是对最终的 1 的贡献系数。假设 ai 被除了 bi 次,则 i=1naikbi=1。要求 biN

然后会发现如果这样一组 bi 存在,就一定可以构造出合法的方式。具体方法是按照 b 从大到小排序,则最大的两个 b 值一定一样。取出最大的两个合并,除几次 k 就把 b 减掉几,然后插回堆中。重复即可。因为保证了 kai,所以一定是可以的。

问题转化为判定。这时可以状压DP,定义 dpS,x 表示存在一组 bi 使得 iSaikbi=x。转移方程有两种:dpS,xdpS+{i},x+aidpS,xkdpS,x。第一种可以用 bitset 优化,这样总时间复杂度是 O(n2naiw+2nai)。最后输出方案只要倒着 DFS 就行。

CF765G

Link&Submission.

会发现幂次是没用的,只用考虑 N=i=1npi,然后把答案乘上 i=1npiαi1

由中国剩余定理,0N1 中的数 k 可以与 (r1,r2,,rn),ri=kmodpi 一一对应。这时 si=1gcd(k+i,N)=1j,pjrj+i。也就是说,确定 rj 之后,我们可能可以确定一些 i 一定满足 gcd(k+i,N)1

那么就有一个暴力:枚举 r1,r2,,rn 的值,维护一个“能否确定不互质”的序列,要求最后这个序列等于 s 的方案数。这个复杂度显然是逆天的,但是会发现每个大于等于 m 的质数都至多让字符串的一位确定为 0,所以只用枚举 <m 的质数对应的余数。

但是还是很大,不超过 40 的质数也不少。好消息是,如果有 2,那么确定模 2 的余数的时候就可以确定一半,有效状态数不超过 220,这启发我们做一个记忆化搜索;坏消息是,如果没有 2,3,状态数还是很逆天。

既然已经这么逆天了,那我们不妨再逆天一点,看看不超过 40 的质数能不能分开处理。枚举会发现从 5 搜到 23 的状态数都不会太大。而当考虑到 29 的时候,就有一些状态可以合并了——中间 18 位只用考虑 0 的个数,它们不会再影响了(以 m=40 为例)。同样的,考虑到 31 就可以只考虑中间 20 位的 0 的个数。做了这个优化之后状态数显著降低,可以通过。

具体而言,维护一个状态:开头 p1 位的具体值,结尾 p2 位的具体值,以及中间 1 的个数。转移是不难的。在考虑 29 之前,把 p1,p2 分别设为 m29,29,其它类似。需要一个哈希表来记录状态。

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