一些经典问题

DDDDD 问题

给一个正整数 NN 和 一个正个位数 DD,求至少多少个 DD 组成的 DDDD\overline{DD\dots DD} 可以被 NN 整除。

1N2×1091\le N\le 2\times 10^9

显然 DDDD\overline{DD\dots DD} 可以表示为 D×(10k1)9\frac{D\times(10^k-1)}{9},推一波式子:

ND×(10k1)99ND×(10k1)d=gcd(D,9N):9Nd10k110k1(mod9Nd)N\mid\frac{D\times(10^k-1)}{9}\\ 9N\mid D\times (10^k-1)\\ 设\,d=\gcd(D,9N):\\ \frac{9N}{d}\mid10^k-1\\ 10^k\equiv1\pmod{\frac{9N}{d}}

此时,若 10109Nd\frac{9N}{d} 不互质那么无解。

考虑如何求出 kk 的最小值,即答案,根据欧拉定理,有:

10φ(9Nd)1(mod9Nd)10^{\varphi(\frac{9N}{d})}\equiv 1\pmod{\frac{9N}{d}}

此时最小的 kk 一定是 φ(9Nd)\varphi(\frac{9N}{d}) 的因子.

证明

φ(9Nd)=M\varphi(\frac{9N}{d})=M,假如最小的 k=xk=xxMx\nmid M,那么设 M=qx+rM=qx+r

因为 10x1(mod9Nd)10^x\equiv 1\pmod{\frac{9N}{d}},所以 10qx1(mod9Nd)10^{qx}\equiv 1\pmod{\frac{9N}{d}}

由于 10M1(mod9Nd)10^M\equiv 1\pmod{\frac{9N}{d}} 所以 10qx+r1(mod9Nd)10^{qx+r}\equiv1\pmod{\frac{9N}{d}}10r1(mod9Nd)10^r\equiv 1\pmod{\frac{9N}{d}}

由于 0r<x0\le r<x,所以 rrxx 更小,矛盾。

那么枚举 φ(9Nd)\varphi(\frac{9N}{d}) 的因子,快速幂判断即可。

树的带权拓扑序问题

给定一棵有根树,每个点有个权值 aia_i,对于该树的所有拓扑序 pp,求 aipi\sum a_ip_i 的最大值。

aa 的最小值为 aua_u,那么不难发现一定有 pu=pfau+1p_u=p_{fa_u}+1

那么不妨把 uufaufa_u 缩起来,给答案增加 aua_u

对于两个连通块 x,yx,y,设其点数和 aia_i 总和为 (sizx,smx)(siz_x,sm_x)(sizy,smy)(siz_y,sm_y),那么 xxyy 前贡献为 sizx×smysiz_x\times sm_yyyxx 前贡献为 sizy×smxsiz_y\times sm_x,所以 xx 排在 yy 前当且仅当 sizx×smysizy×smxsiz_x\times sm_y\ge siz_y\times sm_xsmxsizxsmysizy\frac{sm_x}{siz_x}\ge\frac{sm_y}{siz_y}

那么把连通块权值当成 smsiz\frac{sm}{siz} 看作正常点即可。

合并 uu 的连通块 (sizu,smu)(siz_u,sm_u)faufa_u 的连通块 (sizfau,smfau)(siz_{fa_u},sm_{fa_u}) 会给答案增加 sizfau×smusiz_{fa_u}\times sm_u,边合并边计算即可。

使用堆维护,时间复杂度 O(nlogn)O(n\log n)

区间虚树大小问题

给定一棵有点权的有根树和一个节点序列 aaqq 次询问,每次求 a[l,r]a_{[l,r]} 到根的路径覆盖到的所有点的点权和。

可以离线。

可以回滚莫队维护,O(nn)O(n\sqrt n)

也可以先树剖再启发式合并维护每个点子树中点在 aa 中出现位置的集合,先把 uu 的贡献算进其重儿子,启发式合并维护轻儿子的贡献。

具体的,令 uu 的子树大小为子树中每个点在 aa 中出现的次数之和,按照这个定义进行重链剖分。

剖分完令 wuw_uuu 到其所在重链链顶的点权和,stust_uuu 子树中每个点在 aa 中出现位置的集合,则 stust_u 直接从 sthevust_{hev_u} 继承(hevuhev_uuu 的重儿子),然后把 uuaa 中的出现位置插入到 stust_u,再遍历 uu 的轻儿子 vv,把 xstvx\in st_v 插入到 stust_u

每次插入 xx 找到其前驱后继 lb,rblb,rb,给 l[lb,x],r[x,rb]l\in [lb,x],r\in [x,rb] 的所有区间 [l,r][l,r] 增加 wuw_u 的贡献,这个可以离线再用扫描线维护。

这样由于轻儿子 stvst_v 的大小总是不超过 stust_u 的大小,所以时间复杂度是启发式合并的复杂度,总复杂度 O(nlog2n)O(n\log ^2n)

参考:【2024NOI模拟赛11】项链 做题记录