答案为 Yes
当且仅当 s[1]≠ A
或 s[n]≠ B
。
注意判 n=2。
Alice 可胜利当且仅当 n≥a∧nmoda<b。
显然我们应该凑 (2i−1,2i)。
那么我们用一个括号序列描述 2i−1 和 2i,不难发现答案为
(2nn)n+1⋅n!⋅2n
想到一半才想起来之前见过。
考虑三进制,发现我们把所有三进制下只有 0 和 1 的数拿出来即可,数量足够。
随便取 n−2 个,剩下两个合理选取可以使得 n∣m−s,其中 s 表示选出的数的和,然后平移即可。
注意到操作是可逆的,即我们可以每次令 bi←⊕ij=1bj (1≤i≤k),目标是把 b 变为 a。
考虑从后往前构造。如果我们能在 O(ω)+O(1) 的操作次数内把 bn 变为为 an,我们就能解决原问题了,其中 ω=60 表示值域。
注意到要使 bn 变化肯定最后要操作一次 n,于是我们需要使得 b 序列的异或和为 an。
我们考虑按位操作。设 pd 表示从前往后 2d 这一位为 1 的第一个位置。若操作 pd+1,则只有 bpd+1 的 2d 这一位会发生变化,即异或和的 2d 这一位翻转。我们按照 pd 从大往小的顺序操作,每次若当前异或和与 an 的 2d 这一位不同则操作 pd+1。
看起来很对且必然有解,但我们忽略了一种情况:p 中可能存在相等的位置。
事实上稍微想一下就知道肯定不是必然有解:若 an⊕bn 不在 b1,b2,⋯,bn−1 的线性基的张成中,则无解。
同时我们注意到,只要记录每个数是由线性基中的哪些数表出的,并以其代替 b 操作,就不会存在 p 相等的情况了。
时间复杂度 O(n2ω)。
首先令 ai←ai+i−1,则值域变为 [0,n+m),我们需要求
[xjyn]n+m−1∏i=0(1+xiy)
其中 x 这一维是模 p 意义下的循环卷积。
首先我们令 n+m=kp+b,上式可变为
[xjyn]p−1∏i=0(1+xiy)kb∏i=1(1+xn+m−iy)
后面的边角料可以最后暴力背包求出,我们关注如何求出
f(x)=[yn]p−1∏i=0(1+xiy)k
由循环卷积可以想到单位根。我们考虑求
gj=[yn]p−1∏i=0(1+ωijpy)k
令 d=gcd(j,p),q=pd,可以得到
gj=[yn]q−1∏i=0(1+ωiqy)dk
因为 −ωiq 是 1−(−x)q=0 的 n 个根,所以
n−1∏i=0(1+ωinx)=1−(−x)n
代入上式,可以得到
gj=[yn](1−(−x)q)dk
可以 O(1) 求出。
考虑如何由 g 还原出 f 的系数。这就是一个 idft 的过程,我们有
fi=1pp−1∑j=0gjω−ijp
但是因为没有保证 p 是质数,我们不能直接进行复数操作。我们必须要把单位根消去,注意到 gcd(j,p) 相同的 j 的 gj 也相同,不难想到单位根反演:
fi=1pp−1∑j=0gjω−ijp=1p∑d∣pgdp−1∑j=0[gcd(j,p)=d]ω−ijp=1p∑d∣pgdpd−1∑j=0ω−idjp∑t∣gcd(j,p)μ(t)=1p∑d∣pgd∑t∣pdμ(t)pdt−1∑j=0ω−idtjp=1p∑d∣pgd∑t∣pdμ(t)⋅[p∣idt]pdt
因为我们要对 n,n−1,⋯,n−p+1 求出对应的 f,而后面的系数可以预处理,所以最终的时间复杂度是 O(n+m+p3)。
感受一下:循环卷积、单位根、单位根反演、莫反这几个东西之间是有连边的,以后看到这种还是先往这些方面想。其实就是做的题太少了,不够熟练。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)