日记

这是2025年10月20日的日记

周一 10月 20 2025
427 字 · 2 分钟

为了什么?

小红帽的回文数

神秘根号分治。

考虑对于 >n> \sqrt{n}basebase,它就只能是两位数。所以我们暴力处理 n\le \sqrt{n}basebase,对于 >n> \sqrt{n}basebase,我们设它是 xy\overline{xy}。显然有 x=yx = y。所以有 x×base+x=x(base+1)=nx \times base + x = x(base + 1) = n,我们直接枚举 nn 的因数就是了。

时间复杂度 O(nn)O(n \sqrt{n})

树的计数

没学过 Prufer 序列。

题解里说度数为 did_i 的点会在 Prufer 序列里出现 di1d_i - 1 次,而 Prufer 序列长度为 n2n - 2,所以有答案:ans=i=1n(sumdi1)ans = \prod_{i = 1}^{n}\binom{sum}{d_i - 1}sumsum 在每次乘完之后都得减掉 di1d_i - 1

排列计数

神秘 lucas。

我们发现这玩意形如一个线段树。所以直接预处理出每个点的 sizisiz_i 表示 ii 的子树大小。设 dpidp_i 表示 ii 子树内的答案,所以有 dpi=(sizisizls)×dpls×dprsdp_{i} = \binom{siz_i}{siz_{ls}} \times dp_{ls} \times dp_{rs}

但是要注意的是 nn 可能 mod\ge mod,所以 init 时预处理到 min(n,mod1)\min(n,mod - 1),组合数要用 lucas 定理算。

好吃的题目

必吃的题目。

考虑(我也不知道怎么考虑上的)分治。对于 RmidR \le midL>midL > mid 可以递归的处理,我们只需要处理 LmidR>midL \le mid \land R > mid 的询问就行。

我们设 dpi,jdp_{i,j}imidi \le mid 时表示 [i,mid][i,mid] 这个后缀的背包,在 i>midi > mid 时表示 [mid+1,r][mid + 1,r] 这个前缀的答案。每一层都 O(nT)O(nT) 的暴力处理。查询时枚举 xx,有 ansi=maxx=0TdpL,x+dpR,Txans_i = \max_{x = 0}^{T}dp_{L,x} + dp_{R,T - x}

时间复杂度 O(nTlogn+qTlogn)O(nT \log n + qT \log n)

后日谈

为了真理。


Thanks for reading!

日记

周一 10月 20 2025
427 字 · 2 分钟