A
注意到当 不是全
串时,基本可以变成任意一个
串,具体的思路就是先把
变为全
串(
),然后再变成想要的串。但是会有反例,注意到至少操作了一次的串至少存在一个
,满足
这两个位置上的值一样,所以说一定变不了
或者
这种串,且反例只有这个。
B
发现其实就是要求 。
类似于杨辉三角,有 。
直接计算即可,时间复杂度 。
C
的做法跑的太快了,不知道咋卡。
讲讲我期望的做法吧。
可以发现一个子区间的美丽度只有 三种可能,因为
每次不变或至少除
。
一个子区间的答案为 当且仅当这个子区间的
,设
为满足左端点为
, 右端点最远到
满足这个子区间的
。
怎么快速求 呢,显然直接二分会 tle,考虑对每个数分解质因子,然后倒着扫,维护每种质因子当前能够延伸出去的最远位置,那么
就为
所包含的那些质因子 能够延伸出去的最远位置的
。
如何判断一个子区间的美丽度是否为 ?
设 为满足左端点为
, 右端点最远到
满足这个子区间的
(除去
这个质因子)。
设 为
所含
的质因子个数。
首先得出现 和
,
就是这个子区间的
(除去
这个质因子),难点在于判断出现
,可以发现前缀
为
的右端点也是一段区间(如果存在),只需要找到这个区间的左端点。
一个符合条件的右端点条件有两个:
-
这个位置要在
之后。
-
这个子区间的
的最小值为
。
开个指针倒着扫一遍即可。复杂度为 ,其中
表示
中不同质因子种数的最大值,
,可以接受。
D
确实是简单优化建图题啊,没什么难度。
容易想到将边看成一个点,那其实就好做了。
设关键指针值集合 包括:起点 1 的初始值 0,对于每条连接
的边的颜色,
作为出边的要求值:。即我们必须在
点将指针调整到此值才能进入该边;作为入边的到达值:
。即如果从
点进入该边,到达
时指针会停留在
点出发时的值。
对于每个点 ,在
的相邻值之间建立双向边,形成一个环。边权为两个颜色值的环形距离
。这对应在节点
处花费代价调整指针。
对于原图边 ,令
。
我们在
处调整好指针到
后,经过边到达
,指针仍为
。
因此,建立有向边:
,权值为 0。
最后跑一个 dijkstra 即可。
E.
答案容易写成:
其中 是
在原串
中的所有起始位置集合,
。
令 。
其中 。
注意到 与
的关系是
。那么
可以直接通过正串 SAM 进行计算,同样的
通过反串 SAM 进行计算即可。
如果没有看出这一点,可能会去想分块 NTT。
F.
qanalog 简单练习题。
考虑转换为格路计数,不妨假设让路径在 的上方,那么
实际上就是路径与
之间围成的整格数加上
。考虑如何刻画
,注意可以看作从原点出发,先一直往上走,直到碰到了路径或者
就改变方向。
。
考虑 表示从
走到
且第一次碰撞时上升的高度为
(就是图中所画的)的所有路径的贡献之和。容易写出转移
这个玩意容易写成一个差卷积的形式,于是可以做到 。
请注意在 的阶小的时候直接卷是错的,因为这个时候
可能发生,使用 q-Lucas 定理处理即可。

京公网安备 11010502036488号