AtCoder Regular Contest 145

A

答案为 Yes 当且仅当 s[1] As[n] B

注意判 n=2

B

Alice 可胜利当且仅当 nanmoda<b

C

显然我们应该凑 (2i1,2i)

那么我们用一个括号序列描述 2i12i,不难发现答案为

(2nn)n+1n!2n

D

想到一半才想起来之前见过。

考虑三进制,发现我们把所有三进制下只有 01 的数拿出来即可,数量足够。

随便取 n2 个,剩下两个合理选取可以使得 nms,其中 s 表示选出的数的和,然后平移即可。

E

注意到操作是可逆的,即我们可以每次令 bij=1ibj (1ik),目标是把 b 变为 a

考虑从后往前构造。如果我们能在 O(ω)+O(1) 的操作次数内把 bn 变为为 an,我们就能解决原问题了,其中 ω=60 表示值域。

注意到要使 bn 变化肯定最后要操作一次 n,于是我们需要使得 b 序列的异或和为 an

我们考虑按位操作。设 pd 表示从前往后 2d 这一位为 1 的第一个位置。若操作 pd+1,则只有 bpd+12d 这一位会发生变化,即异或和的 2d 这一位翻转。我们按照 pd 从大往小的顺序操作,每次若当前异或和与 an2d 这一位不同则操作 pd+1

看起来很对且必然有解,但我们忽略了一种情况:p 中可能存在相等的位置。

事实上稍微想一下就知道肯定不是必然有解:若 anbn 不在 b1,b2,,bn1 的线性基的张成中,则无解。

同时我们注意到,只要记录每个数是由线性基中的哪些数表出的,并以其代替 b 操作,就不会存在 p 相等的情况了。

时间复杂度 O(n2ω)

F

首先令 aiai+i1,则值域变为 [0,n+m),我们需要求

[xjyn]i=0n+m1(1+xiy)

其中 x 这一维是模 p 意义下的循环卷积。

首先我们令 n+m=kp+b,上式可变为

[xjyn]i=0p1(1+xiy)ki=1b(1+xn+miy)

后面的边角料可以最后暴力背包求出,我们关注如何求出

f(x)=[yn]i=0p1(1+xiy)k

由循环卷积可以想到单位根。我们考虑求

gj=[yn]i=0p1(1+ωpijy)k

d=gcd(j,p),q=pd,可以得到

gj=[yn]i=0q1(1+ωqiy)dk

因为 ωqi1(x)q=0n 个根,所以

i=0n1(1+ωnix)=1(x)n

代入上式,可以得到

gj=[yn](1(x)q)dk

可以 O(1) 求出。

考虑如何由 g 还原出 f 的系数。这就是一个 idft 的过程,我们有

fi=1pj=0p1gjωpij

但是因为没有保证 p 是质数,我们不能直接进行复数操作。我们必须要把单位根消去,注意到 gcd(j,p) 相同的 jgj 也相同,不难想到单位根反演:

fi=1pj=0p1gjωpij=1pdpgdj=0p1[gcd(j,p)=d]ωpij=1pdpgdj=0pd1ωpidjtgcd(j,p)μ(t)=1pdpgdtpdμ(t)j=0pdt1ωpidtj=1pdpgdtpdμ(t)[pidt]pdt

因为我们要对 n,n1,,np+1 求出对应的 f,而后面的系数可以预处理,所以最终的时间复杂度是 O(n+m+p3)

感受一下:循环卷积、单位根、单位根反演、莫反这几个东西之间是有连边的,以后看到这种还是先往这些方面想。其实就是做的题太少了,不够熟练。

posted @   Scintilla06  阅读(33)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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)
点击右上角即可分享
微信分享提示