2024.2 我在歌坛献首歌 宫殿 塔尖 彩绘 日月 同辉 那层厚重壁垒化身 蝉翼一片

P6396.

好题。

因为和回文串有关,所以我们考虑把他扔到 PAM 里面。考虑在回文自动机的节点间建单向边,然后跑单源最短路。

  • 光归:连边 (i,faili,A),其中 faili 可以为 0

  • 光辉:连边 (faili,i,B),其中 faili 可以为 0

  • 光隐:处理出来 ifai,然后连 k(i,fai,C) 的边。

  • 光腾

这个操作就不能直接连边了,因为我们发现这个操作其实是这个操作,本质上是从 iD 的代价转移到 i 子树中的任意一个结点。这样不行,数量是 O(|S|2) 级别的。

考虑优化建图的思想,对每个点建立一个对应的虚点,而虚点只能往儿子的方向转移(花费为 0)。那么我们只需要对于 i 连一条向 i 的虚点边权为 D 的边,然后 i 的虚点向 i 连一条边权为 0 的边即可。

  • 光弋:这个操作做完了之后就不能做前面的 4 个操作了。所以这个操作我们考虑放到询问的时候再来做。

建完图之后我们跑一边 Dijkstra,然后定义 disi 表示到第 i 个点的最短路。

考虑询问。由于光戈操作只能由回文串在前面添加字符而来,故开始光戈前一定是询问串的一个回文后缀。

首先暴力跳 fail 是简单的,此时考虑如何优化。

我们发现跳 fail 时长度是在不断减小的,也就是查询的实际上是从根出发的一条链的最小值。

然后此时我们可以用倍增求出来第一个 lenprl+1。然后我们就知道答案就是 (rl+1)×E+displenp×E。那么我们查询的复杂度就是 O(qlogn)

那么时间复杂度就是 O(k×|S|+(k×|S|+q)logn)


P4094.

首先这个答案有单调性,所以我们可以二分。

二分答案的最大值,假设当前答案为 len,会有如下的性质:

  • 我们可以找到一个子串 ans 完全位于 [a,b] 之间,那么这个子串的启示点再 [a,blen+1] 之间。
  • LCP(ans,a[c:n])len

height 数组的性质,我们可以发现满足第二个性质的 ans 开头一定是一段包含 c 的连续区间。然后这一步我们依然可以用一个二分来判断两个端点,然后用第一个条件来检测时候合理。

然后这一步我们可以使用主席树来维护,即维护答案的区间内有没有 i 满足 sai[a,blen+1]


CF853E.

首先我们发现若 vxi<0vyi<0 时,我们把 vxivxi,vyivyi 是没有变化的。

此时我们令 p=ptvj。然后我们一个项可得 k=p+wjvj,然后 wi 的取值范围就变为了 [0,2×t]

那么所有合法的 k 就会在以 p 开始按斜率从小到大的顺序依次把向量接起来得到一个下凸壳,和以 p 开始按斜率从大到小顺序接出一个上凸壳之间,那么现在问题就变成了在这个多边形内二维数点了。

对于这种多边形数点,我们可以考虑把整个凸包拆成一些梯形。由于斜率的种数是 O(k) 级别的,所以我们可以枚举斜率然后再做二维数点。

那么复杂度为 O((n+k)logk)


CF850E.

假设 A 胜利,则最终答案就是 A 胜利的数量再 ×3

设第 i 个人对于 AB 之间的投票为 Pi,对于 AC 之间的投票为 Qi,则我们有:

  • Pi=0,Qi=0,那么顺序有 CBABCA

  • Pi=0,Qi=1,那么顺序为 CAB

  • Pi=1,Qi=0,那么顺序为 BAC

  • Pi=1,Qi=1,那么顺序有 ABCACB

此时我们发现当 Pi=Qi 时贡献为 2。此时设 S=S1S2,那么这一对的贡献就是 2npopcount(S)

我们对每个 S 计算出有多少对 S=S1S2fS1=fS2=1,我们发现答案就是 f 与自己的异或卷积,即 i=12n1(jk=ifjfk)×2npopcount(i)

那么直接上 FWT 即可。


P5161.

先令 di=ai+1ai,那么条件就转化为不相邻不相交且相等子串的对数。这个东西不好求,考虑对其进行补集转化,转化为相邻或相交且相等的字串对数。

考虑对 d 求出其后缀数组。根据品酒大会的思路,我们考虑将 hight 从大到小和并相邻的两个排名的后缀。考虑怎么计算两个集合 X,Y 之间的贡献。

我们发现就是 xXyYmax(0,w+1|xy|),其中 w 是现在枚举到的 height。然后对于每一个 y,我们考虑什么时候 w+1|xy|>0,即 w+1|xy|,然后我们把这个绝对值拆开,得 x[yw,y)(y,y+w]。就只需要计算有多少个 x[yw,y)(y,y+w]。这个东西考虑用一颗权值线段树维护。然后和并两个集合 X,Y 就直接用线段树合并就行了。


AT_arc191_c.

太脑电波了,记录一下。

我们钦定 A=n+1,M=n2。然后我们发现 n 就是这个方程的最小解。

证明:你把 Ax 用二项式定理拆开,然后你会发现 Ax=nx+1(modm),此时 x=n 是本方程的最小解。


P6665.

神仙!

由于每一棵树都互相独立,并且操作完一棵树之后这整一棵树都会被删除,所以我们可以考虑把我们的 SG 值设在根节点。那么我们设 fi 为以 i 为根的子树的 SG 值,此时我们考虑删去节点对于答案的影响。

  • 删掉根节点 u:加入 vsonufv

  • 删掉非根节点 v:那么会剩下 vu 路径上每个点的所有子树去掉 u,v 路径上除了 v 结点以外的点的子树。此时考虑记 gu=vsonufv,则会加入 guw(u,v)&wu(gfawfw) 的贡献。

得到这个之后我们就有了 O(n2) 的做法。

考虑用数据结构来优化这几种转移操作。现在要找到一个数据结构可以支持全局异或,快速合并和查询全局 mex。此时我们考虑用 01trie 来维护。其中的全局 mex 可以用二分来解决。

具体的每个结点维护一棵 01trie,这个 01trie 维护 gfavfv。在每一次操作中,这一个 01trie 异或上 gvfv,然后合并到 u 的 01tire 上,此时再把 vsonufv 插入 u 的 01trie,最后查询时求出此时的 mex 即可。


AT_agc027_d.

速通。


P10890.

出题人太强了吧!

前置知识:k 进制下的 FWT,单位根反演。


我们发现就是要求 i=1nj=1m[3l=1kai,j,l×dl]

然后我们对于这个式子进行单位根反演([kn]=1ki=0k1ωkin),可得:

i=1nj=1m[3l=1kai,j,l×dl]=13mi=1nj=1m1+ω3x=1kai,j,x×dx+ω32×x=1kai,j,x×dx

此时我们令一个数组 b,其长度为 mb 中的每一个数均在 [0,2] 之间。此时考虑将这个式子展开,可得答案就是 13mi=1nbω3i=1kdxj=1mai,j,xbj

此时我们已经可以得到 O(n3mk) 的查询了。考虑继续优化。

然后我们定义 ci=j=1mai,j,xbj。同时我们将 ci 带入进式子里面,同时记 cntcc 出现的次数,那么这个序列的答案就变为 13mccntci=1kω3cidi

为了做到 O(k) 的复杂度查询,考虑预处理 d=13k 之内的所有答案。此时我们考虑用 3 -FWT

对于 3-FWT,我们列出来此时的位矩阵:

1111ω31ω321ω32ω34

由于 ω3 在模 109+7 意义下有逆元,所以我们不需要用分圆多项式,模数直接选择 109+7 即可。

然后我们就可以在 O(n3mmk+k3k+qk) 的时间内完成。

posted @ 2025-02-08 13:37  sqrtqwq  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示