2024.1 记录

1.10

HDU 6791. Tokitsukaze, CSL and Palindrome Game

经典结论是,

E(S)=iborder(S)26i.

并且一个回文串的所有 border 就是 PAM 上它的所有祖先。于是比较 E(S)E(T) 的大小只需要在 PAM 上倍增。时间复杂度 O((n+q)logn)

CF1483F. Exam

枚举大串 si 的每个前缀 si[1,p],可以用 ACAM 找到最长的串 sj 使得 sjsi[1,p] 的后缀。小串的候选集合就是这 |si|sj

把这些 sjsi 中的出现区间画出来,那么所有完全被另一个区间包含的 sj 就可以删掉。对于还没被删掉的串,统计其在 si 中出现了多少次,如果出现次数等于它作为最长后缀出现的次数,那么 (si,sj) 是一个答案。

统计出现次数需要用树状数组,时间复杂度 O(|si|log(|si|))

CF1276F. Asterisk Substrings

子串内 在边上或者不存在 的情况是好统计的。

考虑 AB 这个字符串是不是集合内某个字符串的子串。建出正串后缀树和反串后缀树,设 A 在反串后缀树上对应的节点是 uB 在正串后缀树上对应的节点是 v,只要 xendpos(u),x+2endpos(v) 即可。

所以反串后缀树上一个节点对答案的贡献,就是它的 endpos 在正串后缀树上的链并。用树链剖分和线段树合并维护子树链并的大小即可。O(nlog2n)

CTSC 2016. 香山的树

以下认为对于一个串 s,如果 i>|s|,则 s[i]=s[i|s|]

考虑计算以一个串 t 为前缀的,长度不超过 n 的满足条件的串 s 的个数。有两种情况:

  • t<s[i,i+|t|1]
  • t=s[i,i+|t|1]s[t+1,|s|]<s[i+|t|,|s|]

发现不必限制得如此严格:只需要 ts[i,i+|t|1],然后只要 s 不是循环串,就只有恰好一个位置 i 使得 s[i,|s|]s[1,i1] 是满足条件的,且这个位置一定是 t 的某个出现位置。

可以在 KMP 自动机上进行 DP,记录当前匹配到自动机上的哪个节点,以及 t 完整地出现了多少次(这里也需要考虑 s 的一个后缀拼上一个前缀等于 t 的情况)。设 t 出现了 c 次,对答案的贡献系数就是 1c

还需要去除循环串的贡献。设 gi 表示长为 i 的非循环串,且无限循环后以 t 为前缀,且满足 ts[i,i+|t|1] 的串的个数。

如果 i|t|,那么只有在 t[1,i]t 的周期且 t[1,i] 本身满足条件的时候,gi=1

对于 i>t,需要减去每个 j<ijigj 的贡献。这里的贡献系数一定是 ji,因为 gj 表示的是非循环串,而每个 gj 表示的串内 t 都出现了恰好一次。

回到原来的问题,只需要先枚举与 S 的 LCP 长度,再枚举下一个字符填什么,然后用上面的方法计算即可。

1.14

ABC336G. 16 Integers

构造一个 8 个点的图 G,点的标号为 (x,y,z),其中 0x,y,z1。认为一个给定的 (i,j,k,l) 是从 (i,j,k) 连向 (j,k,l)Xi,j,k,l 条边,则题目描述的长为 N+3 的序列可以表示为,从某个点开始,经过每条边恰好一次的一条路径。由于不区分重边,所以需要除以 i,j,k,lXi,j,k,l!

这几乎就是欧拉路径或欧拉回路计数。具体地,如果 G 是半欧拉图,设出度比入度大 1 的点是 s,入度比出度大 1 的点是 t,连一条 ts 的边,转化为欧拉回路计数。

根据 BEST 定理,从一个点 s 开始的欧拉回路的个数是

tw(G)×degs!×us(degu1)!.

其中 tw(G) 是以任意一个点为根的内向生成树个数。

算出这个式子以后,如果 G 是半欧拉图,那么需要钦定 ts 的边是最后走的,所以需要除以 degs。如果 G 是欧拉图,那么从任意一个点开始走都是可以的,所以先选任意一个点当作 s,算出上述式子的值 A 以后,答案就是 A×i,j,k,lXi,j,k,ldegs

1.17

ABC308Ex. Make Q

1.18

ABC310Ex. Negative Cost

ABC306Ex. Balance Scale

ABC305Ex. Shojin

1.19

GDKOI 2024. 染色

不会这种题,比较失败。

首先考虑如何将恰好一个位置 (x,y) 异或 1。显然先操作一下这个位置,然后这个位置四周的四个位置都会异或 1。为了消去这四个位置的 1,可以操作这四个位置。不断进行这个过程,发现进行了 2k 轮的时候,恰好有四个位置是 1:与 (x,y) 在同一行或同一列,且距离 (x,y) 恰好 2k 的位置。称这样的 2k 轮操作是一个大小为 k 的操作。

所以,经过 2n 轮后,这四个位置会与 (x,y) 重合,这样就只有 (x,y)1 了。

如果有多个位置需要异或 1,可以倒着考虑这些操作:一开始这些位置需要大小为 n 的操作,而每个大小为 n 的操作都可以用五个大小为 n1 的操作完成,最后只剩了一些大小为 0 的操作,而这就是单点操作。

时间复杂度 O(n2n)

(这种题应该手玩一些 n 比较小的情况,不应该优先考虑找规律。)

GDKOI 2024. 计算

首先,当 a,b>0 时,F(m,a,b)=mgcd(a,b)。所以一定有 L1(modm),R0(modm)。所以这段区间是 n=RL+1m 个完整的 [0,m) 区间拼成的。

列出式子:

0x0,x1,,xm1n[m | i=0m1ixi]i=0m1(nxi)

单位根反演,并做一些化简:

1mi=0m1j=0m1(1+ωmij)n

n 次方可以提到乘积外面,考虑这个乘积的式子,由于单位根的几何意义,设 d=gcd(i,m),它等于:

j=0md1(1+ωmdj)d

由于有如下因式分解:

xk1=i=0k1(xωki)

代入 x=1,k=md 即可化简上述式子。然后做莫比乌斯反演即可。

IOI 2024 集训队互测 Round 10. 雷同

将所有书按照重量从小到大排序。考虑建出合并的二叉树,设 depi 表示第 i 本书的深度,答案由两部分组成:

  • 每个 iwi×depi
  • 二叉树上每个非叶子节点 u,设它的两个儿子的子树高度是 h1,h2,对答案的贡献是 2min(h1,h2)1

注意到 depi 一定单调不增,所以子树高度一定有 h1h2

按深度从大到小逐层 DP,由于深度大于某个值的一定是一个前缀,所以设 fi,j 表示当前这一层有前 i 本书,形成了 j 个子树的最小代价。加入一本书时:

  • 将这本书放在这一层,作为一个新的子树;
  • 然后进行若干次合并,每次将所有相邻的子树合并成一个新的(j 个子树会变成 j2 个)。这里最优的合并方式一定是按顺序合并,因为这样可以使得新形成的树的高度最小。

这里合并的代价不好计算,但是注意到新加入的一个排名为 j 的单点,对答案的贡献是固定的一个值 vj

时间复杂度 O(n2)

1.20

GDKOI 2024. 匹配

首先用网络流求出一组完美匹配。如果它有偶数条黑色边就做完了,否则需要在残量网络上找到一个有奇数条黑色边的简单环。

设状态 (u,v,c) 表示可以找到一个从 uv 的路径,其黑色边个数的奇偶性是 c。为了找到简单环,BFS 到第一个 u=vc=1 的状态就结束即可。

可以做到 O(n2.5+n3w)

IOI 2024 集训队互测 Round 17. 区间切割

1.22

ARC170E. BDFS

1.23

ARC141D. Non-divisible Set

1.30

ARC141E. Sliding Edge on Torus

1.31

ARC137E. Bakery

作者:alan-zhao-2007

出处:https://www.cnblogs.com/alan-zhao-2007/p/18052736

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Alan_Zhao_2007  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题