Solution Set -「LOCAL」冲刺省选 Round XXI
阅读原文时间:2023年07月08日阅读:1

\(\mathscr{Summary}\)

  省选几个小时啊,怎么模拟赛只打三个小时啊。/kk

  时间安排较为合理,没有出现严重的因思考时间过少引起的丢分。

  A 题比较可惜,二分 + 点分治大概想了一下就叉掉了,再后来就没再想起二分。骗分的时候 Manacher 又写假了,笑死,字符一定要调整成 ^|a|a|a|a| 的形式,前后的 | 都不能少。

  B 题要是出在所谓“Burnside 算法练习题”里,估计还有挣扎的余地,Burnside 相关的东西确实不熟悉,依靠并不扎实的线代推了一会儿果断暴力 \(16\text{pts}\),问题不大。

  C 题比较舒服,从比题解不知道简单多少的角度猜想并证明了关键结论,由于 Min_25 筛忘得很彻底,而且暴力 \(80\text{pts}\) 非常舒适,所以线性筛写了就走,问题不大。

  表现中规中矩叭。

\(\mathscr{Solutions}\)

  Contest link. (private)

  给定一棵含 \(n\) 个结点的边带权的树,求树上最长回文路径长度。 \(n\le10^5\)。


  分奇数偶数情况分别二分,现考虑检验是否存在长度为 \(L\) 的回文路径。点分治,从分治中心扩展,用长度 \(\ge\lceil\frac{L}2\rceil\) 的一侧路径更新答案。现在问题形如判断 AxBC 是否是回文(其中 \(x\) 指分治中心结点,不是字符;\(|A|=|C|\)),对 \(A\) 维护 hash 桶,对 \(BC\) 动态更新前缀的正向 hash 和反向 hash 即可 \(\mathcal O(1)\) 判断(假定桶为 \(\mathcal O(1)\))。最终复杂度为 \(\mathcal O(n\log^2 n)\),巨大卡常。

  值得一提的乱搞:拆边使得回文中心在点上,从每个点 BFS,保证每个队列里的点都有与之构成回文的点。虽然在所有字符一样等平凡的情况就会 \(\mathcal O(n^2)\),但这种不难写、迎合某竞赛组织数据水、不绑点的尿性的暴力还是有意义的。

  给定 \(n\) 和素数 \(p\),求在模 \(p\) 意义下,有多少 \(n\times n\) 的矩阵对 \((A,B)\) 满足 \(\det B\not=0,A=BA\)。答案模 \(998244353\)。 \(n\le3\times10^7\)。


  第一步转化不太显然:\(A\) 可以视作变换 \(B\) 下的不动点,继而引入 Burnside 引理:

\[|X/G|=\frac{1}{|G|}\sum_{g\in G}|X^g|.
\]

可以验证所有可能的 \(B\) 构成群。套用公式,我们只需要求出

\[|G||X/G|.
\]

  对于 \(|G|\),即 \(n\) 维满秩矩阵的数量。依次枚举列向量,当前列向量的限制有且仅有:不落在已有列向量张成的空间内。而 \(k\) 个线性无关向量张成的空间大小显然是 \(p^k\),因此

\[|G|=\prod_{i=0}^{n-1}(p^n-p^i).
\]

  对于 \(|X/G|\),即所有 \(A\) 在行变换意义下的等价类数量。分 \(\operatorname{rank} A\) 讨论,设 \(\operatorname{rank} A=k\),可以钦定 \(A\) 的前 \(k\) 个行向量构成 \(A\) 的行空间的基,取它们构成 \(k\times n\) 的矩阵 \(A'\)。枚举 \(k\times k\) 的行变换 \(B'\),那么可重集 \(\{B'A'\}\) 中,每个 \(A'\) 恰出现 \(|\{B'\}|\) 次,继而可知每个等价类的大小都是 \(|\{B'\}|\),所以

\[|\{A\mid \operatorname{rank}A=k\}/G|=\frac{|\{A'\}|}{|\{B'\}|}=\prod_{i=0}^{k-1}\frac{p^n-p^i}{p^k-p^i}.
\]

  最终有

\[|G||X/G|=\prod_{i=0}^{n-1}(p^n-p^i)\sum_{k=0}^{n}\prod_{i=0}^{k-1}\frac{p^n-p^i}{p^k-p^i}.
\]

\(\mathcal O(n)\) 求所有分母的逆元,最终复杂度 \(\mathcal O(n)\)。

  给定 \(n\)。令 \(f(S)\) 表示在集合 \(S\) 中最多能选出多少个不存在整倍数关系的数。求

\[\sum_{S\subseteq[1,n]\cap\mathbb P}f(\{x\in[1,n]\mid\exist p\in S,p\mid x\}).
\]

答案对 \(998244353\) 取模。 \(n\le10^{10}\)。


  注意和式中的 \(f\) 的参数集合 \(T\) 满足:若 \(x\in T,2x\le n\),则 \(2x\in T\)。因此可以猜测,\(f(T)\) 的值为 \(|\{x\in T\mid x>\lfloor\frac{n}{2}\rfloor\}|\)。通过说明对于任意选取的集合 \(X\),若有 \(x\in X,x\le\lfloor\frac{n}{2}\rfloor\),那么取出最大的满足条件的 \(x\),都有 \((X\setminus\{x\})\cup\{2x\}\) 成立,即可证明。

  因此,我们只关心 \((n/2,n]\) 内的数在多少个 \(S\) 中出现。记 \(\omega(n)\) 表示 \(n\) 的素因子数量,\(\pi(n)\) 表示不超过 \(n\) 的素数数量,那么答案为

\[\begin{aligned}
\mathcal R &= \sum_{i=n/2+1}^n2^{\pi(n)}-2^{\pi(n)-\omega(i)}\\
&= 2^{\pi(n)}\left[(n-n/2)-\sum_{i=n/2+1}^n2^{-\omega(i)}\right].
\end{aligned}
\]

\(f(n)=2^{-\omega(n)}\) 显然积性,所以其前缀和可以与 \(\pi(n)\) 一并由 Min_25 筛求出来。复杂度 \(\mathcal O\left(\frac{n^{3/4}}{\log n}\right)\)。

  你(我)Min_25 忘干净啦?怪不得只有 \(80\text{pts}\)。你应当赎罪

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章