Loading

pkusc/wc 做题记录&题解

鲜花

所有题目来源:search pku in qoj

参考文章:

pkusc 2024 Day1

T1 (回文路径)

原中原P4324

给定 \(2\times n\) 网格,每个格子上有一个字符,考虑一条只能向下和向右走的路径,如果路径上每个字符连成的字符串是回文串,称这条路径是好的,求最长好路径。

\(1\le n\le 10^5\)

$\bf{solution}$

枚举回文中心在啥位置,不妨设在第一行。二分出在第一行能走到的最长距离(容易证明这样贪心是对的),然后往下走,再二分在第二行能移动到最长距离。

判断回文用哈希即可,复杂度 \(O(n)\)

\(\bf{record}\)

T2 (正方形计数)

给定凸 \(n\) 边形 \((x_1,y_1)\sim(x_n,y_n)\),求有多少正方形(可以是斜正方形)在该多边形内。

\(1\le n\le 8,1\le x_i,y_i\le 2000\)。时限 4s

$\bf{solution}$

考虑枚举正方形的一条边向量 \((\Delta x,\Delta y)\),然后对起点坐标有若干限制,可以写成半平面交的形式。

相当于数某个多边形内部整点数,可以拆成对 \(\mathcal O(n)\) 条线段下方的区域内数点个数,类欧几里得算法解决。

时间复杂度 \(\mathcal O(nV^2\log V)\)


但是本题小常 \(V^3\) 能过,于是有如下做法:

直接记录凸包当 \(x=t\) 时包含的整点区间 \(l_t,r_t\)

然后同样枚举正方形的一条边向量 \((\Delta x,\Delta y)\),然后枚举起点 \(x\) 坐标,此时起点 \(y\) 坐标限制显然是一个区间,通过 \(l,r\) 算出即可。

上下界实现精细一点就能通过。

\(\bf{record}\)

T3 (独立)

弱化版:P8352

给定 \(n\) 个点的树,每个点点权在 \([1,m]\) 中随机,求所有方案下树上最大权独立集的和。

数据范围:\(1\le n\le 2000,1\le m\le 10^{8}\)


pkusc 2024 Day2

T1 (分流器)

在一张 \(n+1\) 个点的有向图上,\(1\sim n\) 出度都为 \(2\),且边 \(i\to j\) 满足 \(i<j\)。称每个点的两条出边为左右手。在这个图上做一个投球游戏,多次在 \(1\) 放球,每次球从 \(x\) 的左手滚下,然后交换 \(x\) 的左右手。

求最小周期,即最少放球个数使得左右手状态和初始状态一致。

\(1\le n\le 5\times 10^4\)

$\bf{solution}$

考虑维护 \(1\sim i\) 的最小周期,并且求出此时每个点被经过的次数 \(f_{i}\)

可以据此计算出 \(f_{i+1}=\sum\limits_{i+1\in \mathrm{out}(u)} \dfrac{f_u}2\),如果 \(2\nmid f_{i+1}\) 那么最小周期要翻倍,每个 \(f_i\)\(\times 2\)

一个较好的实现是令 \(f_{1}=2^n\),令 \(k=\min\limits_{i=1}^n \mathrm{lowbit}(f_i)\),答案就是 \(2^{n-k+1}\),压位高精度维护。

时间复杂度 \(\mathcal O\left(\dfrac {n^2}{\omega}\right)\)。—— $\bf{solution by Dairuichen}$

\(\bf{record}\)

T2 (排队)

给定 \(n\) 个区间 \([l_i,r_i]\),定义 \(f_i(x)=x+[l_i\le x\le r_i]\)\(q\) 次询问 \(L,R\),求 \(f_R(f_{R-1}(\cdots f_{L}(0)))\)

\(1\le n,q\le 10^6\)

$\bf{solution}$

扫描线,设当前扫描到 \(R\)\(x_L=f_R(f_{R-1}(\cdots f_{L}(0)))\),容易发现 \(x_L\) 单调不增。

线段树维护所有 \(x_i\),二分出 \(x_L\in[l_i,r_i]\)\(L\) 区间,区间加即可。复杂度一只 $\log$。

\(\bf{record}\)

T3 (最短路径)

给定纯随机的 \(n\) 个点 \(m\) 条边的带权有向图,\(q\) 次随机询问某对点 \(S\to T\) 的最短路。

\(1\le n\le 2\times 10^5,1\le m\le 3\times 10^6,1\le q\le 10^4\)


pkuwc 2024 Day1

T1 (Caught in the Middle)

给定一个长度为 \(n\) 的仅包含 L,R 的字符串 \(s\)Alice,Bob 博弈,Alice 先手。

每次操作时,假定当前剩余字符串为 $s$。如果 $s$ 为空串,则此时操作者输掉游戏。否则操作者可以选择整数 $i\in [1,|s|]$。

如果 \(s_i = \bf{'L'}\),则操作后剩余字符串为 \(s_{1}s_{2}\cdots s_{i-1}\);如果 \(s_i = \bf{'R'}\),则操作后剩余字符串为 \(s_{i+1}s_{i+2}\cdots s_{|s|}\)

求在最优情况下谁会获胜。\(1\le n\le 10^6\)

$\bf{solution}$

RL 分别看成左/右括号,发现答案是括号序列能否匹配。

证明就考虑一个括号序列任意操作一次后,把和其匹配的另一个括号也操作一下就仍然是括号序列。

而不是括号序列时操作从左到右第一个有多余 L 的那个 L 就一定能操作成括号序列。

如果没有多余的 L,则一定能找到一个 R 使得操作其合法。

\(\bf{record}\)

T2 (最小值之和)

T3 (堆操作练习题2)


pkuwc 2024 Day2

T1 (圆)

\(\text{round}(x)\) 表示 \(x\) 的四舍五入。给定 \(n\) 个恰好一位的小数,构成了可重集 \(S\)。你可以进行两个操作:

  • 取出 \(x\in S\),放入 \(\text{round}(x)\)

  • 取出不同的 \(x,y\in S\),放入 \(x+y\)

你要使最终集合 \(S\) 中只剩一个数,并最大化这个数。

\(1\le n\le 10^6,a_i\in [0,10)\),保证 \(a_i\) 都只有一位小数。

$\bf{solution}$

十分位 \(\ge 5\) 的直接四舍五入,\(=0\) 的不影响答案。接下来贪心地做匹配:

  • 优先匹配 \(4,1\),然后把所有 \(4\) 变成 \(3\)(容易证明这不影响答案)

  • 再依次做 \(3+2,3+1+1,3+3\) 的匹配,然后把所有 \(3\) 变成 \(2\)(容易证明这不影响答案)

  • 最后匹配 \(2+2+1,2+1+1+1,2+2+2,1+1+1+1+1\),就求完了答案。复杂度线性。

\(\bf{record}\)

T2 (排序)

T3 (栈)


pkusc 2023 Day1

T1 (Border)

给定长度相同的非空字符串 \(S,T\),对于任意 \(1 \le i \le |S|\),进行如下询问:

  • 假设将 \(S\) 的第 \(i\) 个字符替换为 \(T\) 的第 \(i\) 个字符,形成的新字符串 \(S'\) 的最长的 \(\text{border}\) 是多少。如果不存在 \(\text{border}\),则返回 \(0\)

询问互相独立。\(1\le n\le 2\times 10^6\),字符集为小写英文字母。

$\bf{solution}$

特判掉 \(S_i=T_i\) 的位,答案就是原串的最大 \(\text{border}\)

首先如果原串的某个 \(\text{border}\) 在其不包含某一位,则直接贡献上去。

否则枚举 \(\text{border}\) 长度,二分哈希出第一个不同的位,修改成前缀或后缀的对应位值分别贡献上去。

所有过程均可用哈希实现。复杂度 \(O(|S|\log |S|)\)

\(\bf{record}\)

T2 (狼人杀)

\(n\) 个人,第 \(m\) 个人是狼人,其余随机一个人是预言家,预言家每天等概率随机一个区间 \([l,r](l\le r)\) 并知道其中有没有狼,求期望几天确定狼的位置。

\(1\le m\le n\le 150\)

$\bf{solution}$

记一个集合 \(S\) 表示当前状态下可能为狼人的人。那么 \(S\) 应该满足包含 \(m\) (正确的狼人) 并且不包含预言家。

考虑在这个状态 \(S\) 下期望需要多少次询问才能得到新的不是狼人的信息。

如果一次询问没有得到信息,要么区间内所有的人都已经确定不是狼人,要么区间包含所有的可能的狼人。

如果一次询问是此类区间的概率为 \(p(S)\),则 \(\sum_S \frac{(-1)^{|S|+1}}{1 - p(S)}\) 的值即为答案的值。

考虑集合 \(S\) 外每段连续的人。设每一段连续的人的长度依次是 \(c_1, c_2, \cdots, c_k\) (如果两端不选则记为长度为 \(0\)),函数 \(f(x) = \frac{x(x+1)}{2}\) 表示长度为 \(x\) 的区间的子区间数目,则 \(p(S) = \frac{\sum f(c_i) + (c_1 + 1)(c_k + 1)}{f(n)}\)

注意到 \(f(c_1 + c_k + 1) = f(c_1) + f(c_k) + (c_1 + 1)(c_k + 1)\),所以我们可以视开头和结尾的段是相连的并且额外多出来一个一定要选择的人。

考虑动态规划,设 \(f(i, j, k)\) 表示对于前 \(i\) 个人,贡献的子区间数目 (即上述式子的分子部分) 为 \(j\)\(k = 1\) 表示预言家的位置已经确定的方案数。

转移是容易的,时间复杂度 \(\Theta(n^4)\)

By @masterhuang: 那个 \((-1)^{|S|+1}\) 那里可以用 min-max 容斥理解。要求的是最后被确定的时间 (\(\max\)),转化成求某个子集里第一个能有元素被确定出来的时间。

—— \(\bf{solution by Milmon}\)

\(\bf{record}\)

T3 (天气预测)

一棵以 \(1\) 为根的树,每个点 \(u\) 有一对权值 \((a_u,b_u)\)\(a_u\)\(1\) 的概率为 \(p_u\),为 \(0\) 的概率为 \(1-p_u\)。确定 \(a_u\) 后,计算 \(b_u\)\(a_u\)\(b_v\)\(v\)\(u\) 的子节点)的众数(保证子节点个数为偶数个,即参与计算众数的点数为奇数)。求 \(b_1\)\(1\) 的概率。\(Q\) 次更改某个点 \(u\)\(p_u\)

\(N\le 2\times 10^5\),\(Q\le 5\times 10^4\),修改不独立。时限 5s

$\bf{solution}$

Zaunese's blog


pkusc 2023 Day2

T1 (排队)

有若干个人排队,一开始队列是空的,在第 $t(t=1,2,\cdots,n)$ 个时刻发生了如下的事件之一:

  1. $x$:新增了一个人,他的编号顺延,他站在编号为 $x$ 的人后面($x=0$ 表示在队伍开头)。
  2. $i,y$:设编号为 $i$ 的人进入队伍的时间为 $t'$,则修改 $t'$ 时刻的操作为 $1\ y$
    • 修改操作会影响 $t'$ 时刻之后的所有操作。
  3. $z$:查询此时编号为 $z$ 的人站在队伍的第几个位置。
$1\le n\le 3\times 10^5$
$\bf{solution}$

考虑用平衡树维护序列,发现只需要支持:按 \(siz\) 分裂,合并,查询平衡树内最右端的 \(\ge x\) 的位置。用 \(\bf{FHQ-treap}\) 维护即可,复杂度 \(O(n\log n)\)

\(\bf{record}\)

T2 (圣遗物)

T3 (解方程)


pkuwc 2025 Day1

T1 (电池检测)

给定 \(a+b\) 个电池,\(a\) 个好 \(b\) 个坏。你知道 \(a,b\) 是多少。

你每次可以同时在灯泡上接两个电池,当且仅当两个都是好的时候灯泡会亮,求最坏情况下使灯泡亮的最少次数。

多测,\(a\ge 2,b\ge 1,T,a,b\le 10^3\)

$\bf{solution}$

抽象成图,连两个电池看成连边。于是你要连最少的边使得覆盖 \(a+b\) 元完全图的所有 \(a\) 元团。

根据 NOI 2024 百万富翁 的思路,显然把图均匀连成 \(a-1\) 个团是最优的连法。(我赛事是根据 \(a=3\) 的情况发现的规律)

即连 \((a+b)\bmod (a-1)\)\(\lfloor\frac{a+b}{a-1}\rfloor+1\) 元团,连 \(a-1-(a+b)\bmod (a-1)\)\(\lfloor\frac{a+b}{a-1}\rfloor\) 元团。复杂度 \(O(T)\)

\(\bf{record}\)

T2 (Ancestors)

给定一颗 \(n\) 个点的树,\(m\) 次询问 \(l,r,x\),记 \(fa_k(x)\) 表示 \(x\)\(k\) 级祖先,若不存在则 \(fa_k(x)=\varnothing\)

你需要求 \(\left\vert\bigcup\limits_{i=l}^r\{fa_x(i)\}\right\vert\),即区间本质不同的 \(x\) 级祖先个数。

\(1\le n\le 10^5,1\le m\le 10^6\)。时限 4s

Hint:有一档部分分是保证 \(l=1\)。还有就是 \(n\le 5\times 10^4,m\le 2\times 10^5\) 这样的分。

$\bf{solution}$

本质上是个类区间数颜色问题。

首先观察同颜色的点必定 同层,即深度相等。

然后考虑数颜色经典 trick,记 \(\text{pre}_i\) 表示最大的 \(j<i\) 使得 \((i,j)\) 颜色相同。

那么答案就是 \(ans=\sum\limits_{i} [l\le i\le r]\cdot[\text{pre}_i<l]\)


接下来考虑动态维护 \(\text{pre}\),观察这东西 \(x\to x+1\) 的变化量。

对于每层考虑,发现 \(u,v\) 颜色相同的时刻是 \(\text{lca}(u,v)\),或者说 \(x=d_u-d_{\text{lca}(u,v)}\)

然后建出虚树,对所有儿子启发式合并一下,维护 \(\text{pre}\) 的变化量。

由于启发式合并,变化量是 \(\mathcal{O}(n\log n)\) 级别的。


问题就转化为对 \(x\)小到大扫描,初始 \(x=0\)\(\text{pre}\) 值全为 \(0\)

\(\mathcal{O}(n\log n)\) 次修改 \(\text{pre}\) 的值,\(\mathcal{O}(n)\) 次询问 \((i,\text{pre}_i)\in [l,r]\times [1,l-1]\) 的个数。

动态二维数点等价于三维数点,复杂度 \(\mathcal{O}((n\log n+m)\log^2 n)\)\(O((n\log n+m)\sqrt n)\)

我实现了后者,获得了目前的 最优解,不过是 \(\mathcal{O}(n\sqrt n)\) 空间。

\(\mathbf{record}\)

T3 (基础博弈练习题)

给定一张 \(n\) 个点 \(m\) 条边的有向图(有重边无自环),绝顶聪明AliceBob 在上面博弈,Alice 先手。

图中每个点 \(u\) 都有一个颜色 \(a_u\)。称点 \(A\) 能到达 \(B\) 当且仅当 \(A\) 走若干条边能走到 \(B\)

若给定一个序列 \(b_1,b_2,\cdots ,b_k\),给定初始 Alice 的起点 \(s\),则 AliceBob 轮流操作:

  • 设第 \(i\) 次操作的人在点 \(x\),他需要走到一个 \(a_y=b_i\)\(x\) 可达的点 \(y\),若某人无法操作,则他输掉游戏。

  • 若进行完了 \(k\) 次操作,则进行第 \(k\) 次操作的人胜利。

Alice 可以删掉 \(b\) 序列的 \(r\) 个数(游戏变成 \(k-r\) 轮)。对于每一个 \(i\),求出当 \(s = i\) 时,能使 Alice 必胜的 \(r\)\(\min\),或者报告无解。

\(1\le n,k\le 10^6,1\le m\le 2.2\times 10^6,1\le a_i,b_i\le n\)

Hint:有一档部分分是保证 \(b_i=i\)。还有就是保证 \(n,m,k\le 10^2/10^3\) 的部分分。

$\bf{solution}$

pkuwc 2025 Day2

T1 (网友小 Z 的树)

交互题。

给定 \(n\le 10^5\),有一个 \(n\) 个点的无边权树,你需要通过 \(\color{red}{Q_1\le 3\times 10^5}\) 次询问 \(1\)\(\color{red}{Q_2\le 2}\) 次询问 \(2\),询问出任意一条直径的两个端点。

  • 询问 \(1\):给出三个互不相同的数 \(1\le x,y,z\le n\),返回 \(dis(x,y)+dis(y,z)+dis(z,x)\)

  • 询问 \(2\):给出三个互不相同的数 \(1\le x,y,z\le n\),返回一个 0/1 表示:\(x\) 是否在 \(y\to z\) 的路径上。

部分分形如 \(n\le 100,[1,10]\times 10^4\)

$\bf{solution}$

这是一个确定性做法,暂时最短解。先特判 \(n\in [1,3]\) 的情况。

首先考虑我们通过 \(3n-\epsilon\) 次询问能问出什么。

考虑求出使得 \(x,2,3\) 最大的 \(x\),再求出使得 \(x,y,3\) 最大的 \(y\),再求出使得 \(x,y,z\) 最大的 \(z\)

容易调整(或反证)得出 \(x,y,z\) 必有两个直径的端点。此时在第三步的时候记 \(f_i=\text{query}(x,y,i)\)


首先设 \(mn=\min\{f_i\}\),观察此时 \(f_i\) 取到 \(mn\) 的位置,发现此时 \(i\) 只能为 \((x,y)\) 树链上的任意点。

任取一个 \(i,{\color{red}{\bf{let}}}\ t\gets i\)

  • 注意到若 \(x,y,z\) 构成链则整张图一定也构成链。

判断 \(f_z=mn\) 是否成立,若成立则 \(z\)\((x,y)\) 的链上,直接回答 \((x,y)\)

否则我们注意到 \(t\) 要么在 \((x,z)\) 的路径上要么在 \((y,z)\) 的路径上(也能同时)。

  • 并且注意到 \({\color{red}{(mn=dis(x,y))}}+dis(y,z)+dis(z,x)=2\times {\color{red}{query(x,y,z)}}\)

此时还剩两个未知数,于是我们询问出 \(dis(x,z)\bf{(if\ t\ in\ (x,z))}\)\(dis(y,z)\bf{(if\ t\ in\ (y,z))}\) 就能知道另一个。

我们此时能通过一次询问就能得出 \((x,y),(y,z),(x,z)\) 链的长度,checkmax 后直接找出直径即可。

此时显然 \(Q_1\le 3n\),因为找 \(x,y,z\) 的过程 \(3n\) 不满。


但是此时还有一种情况就是找不到在 \((x,y)\) 路径上的 \(t\)。即 \(x,y\) 相邻。容易发现此时图也必然是一条链。

先询问 in(y,x,z) 判断此时 \(y\) 是否在 \((x,z)\) 的链上,是则直接回答 \((x,z)\)

否则此时链的情况是 \(y-x-z\),我们得出的 \(t'\) 实际上是在 \(x\)\(z\) 的方向走一个点。

我们按照同样的方法计算 \(dis(y,z),dis(x,z)\)。注意到此时 \(dis(x,y)\) 被我们从 \(1\) 当成了 \(2\)

于是算出 \(dis(y,z)=dis(x,z)=n-2\)。此时真正的直径是 \((y,z)\),此时我们分别判断:\(dis(y,z),dis(x,z),dis(x,y)\) 是否为最大值即可。

注意:有 \(n=4\) 的情况此时我们算出的三个直径相等,所以一定 \(dis(y,z)\) 的优先级要最高,剩下俩随意。

改一下最后顺序即可,其他不用动。

if(f[z]==mn) return {x,y};//z in (x,y)?
if(in(y,x,z)) return {x,z};//y in (x,z)?这个先判显然也可以,没啥区别
bool o=in(t,x,z);int d1=mn,d2,d3,mx;
if(o) d2=query(x,t,z),d3=2*d-d1-d2;
else d3=query(y,t,z),d2=2*d-d1-d3;//计算 dis(x,y),dis(x,z),dis(y,z)
mx=max({d1,d2,d3});
if(d3==mx) return {y,z};
if(d2==mx) return {x,z};
if(d1==mx) return {x,y};//(y,z) 优先级最高

\(\bf{record}\)

T2 (盒子)

给定 \(n,m,k,c\),初始有 \(n\) 个盒子,第 \(i\) 个盒子有 \(a_i\) 个球,有两种操作:

  • 选择任意一个盒子取出一个球,花费代价 \(1\)

  • 选择连续 \(m\) 个盒子,取出总共 \(k\) 个球,花费代价 \(c\)

求取完所有 \(n\) 个盒子球的最小代价。

\(1\le m\le n\le 5\times 10^5,1\le c\le k\le 10^9,1\le a_i\le 10^9\)

$\bf{solution}$

T3 (数字变换)

给定一个数字 \(x\),初始 \(x=1\),每次可以对这个数字进行三种操作:

  • A\(x\gets x+1\)

  • D\(x\gets x-1\),条件是 \(x>1\)

  • M k:选择一个正整数 \(k>1\)\(x\gets kx\)

小树想知道,对于每个整数 \(n\in [l,r]\),他有多少种长度 \(\le B\)本质不同 的操作序列,使得 \(x\) 按顺序执行这些的操作后会变为 \(n\),对 \(998244353\) 取模。

\(1\le l\le r\le 3\times 10^9,r-l\le 3\times 10^4,1\le B\le 100\)。时限 7s

$\bf{solution}$

这题看着只要写一个亚线性的东西就能过。


前置知识:区间筛。

给定 \(1\le l\le r\le 10^{14},r-l\le 10^7\),求 \([l,r]\) 中所有数的素因子个数。

就是枚举 \([1,\sqrt r]\) 的素数 \(p\),直接枚举 \([l,r]\)\(p\) 的倍数即可,并且每个数除掉所有因子 \(p\)

最后 \(>\sqrt r\) 的素因子,就把前面所有 \(\le \sqrt r\) 的因子除掉,若结果 \(>1\) 则剩下的就是 大素因子

不断除素因子的过程,相当于找 \(p^k\) 倍数。复杂度形如 \(\sum\limits _{p^k} \frac{r-l}{p^k}\)

由于 \(\sum\limits_{1\le p\le n}\sum\limits_{k\ge 1}\dfrac{1}{p^k}\sim \mathcal{O}(\log\log n)\),复杂度为 \(\mathcal{O}(\sqrt r+(r-l)\log\log r)\)​。

\(\mathcal{O}(\sqrt r)\) 预处理素数后,单次复杂度其实是 \(\mathcal{O}(\frac{\sqrt r}{\log r}+(r-l)\log\log r)\)


先考虑朴素 dp\(f_x\) 表示值为 \(x\) 的方案数。

初始 \(f_0=1\),设上一层状态为 \(g\),这一层为 \(f\)

每层转移形如:

  • \(f_x\gets g_{x-1}+g_{x+1}\)

  • \(f_x\gets \sum\limits_{d\mid x,d\neq x} g_d\)

相当于:

  • \(f= g\)

  • \(f\)狄利克雷前缀和

  • \(f_x\gets g_{x-1}+g_{x+1}\color{red}{-g_x}\)

\(\color{red}{-g_x}\) 是因为狄利克雷前缀和没有考虑 \(d\neq x\)

转移 \(B\) 层,复杂度 \(\mathcal{O}(Br\log \log r)\),通过部分分。


发现这时候状态太多了,很多数其实根本不可能出现。

考虑从 \([l,r]\) 开始倒退,发现所有可能出现的数只能在 \(U=\bigcup\limits_{x}\left[\lfloor\frac{l}{x}\rfloor-B,\lfloor\frac{r}{x}\rfloor+B\right]\) 中。

分析发现 \(|U|\) 大约顶多 \(B\sqrt r\)​ 这么大,是可以接受的。

  • 找到 \(U\) 就是先整除分块得到若干区间,再按 \(r\) 排序扫描线去重即可。

接下来瓶颈在于 狄利克雷前缀和,也就说要快速找到所有 \(x\in U\)\(x\)​ 的所有 素因子 即可。

注意到 \(\forall x\in U,d\mid x\Rightarrow d\in U\)

怎么找呢?直接区间筛即可。

考虑区间筛部分单次 \(\frac{\sqrt r}{\log r}\) 可能有点问题,分析一下:

对于 \(U\) 中值 \(\le \sqrt r\) 的部分,由于是连续的 \([1,\sqrt r]\),于是只会调用一次区间筛,复杂度是对的。

否则顶多是 \({\color{red}{x\le \sqrt r}}:\left[\lfloor\frac{l}{x}\rfloor-B,\lfloor\frac{r}{x}\rfloor+B\right]\) 这些区间要区间筛。

最大值当成 \(\mathcal{O}(\frac{r}{y})\) 级别的话,\(\sum\sqrt {\mathbf{r}}\)\(\sum\limits_{x\le \sqrt r}\sqrt {r/x}\)

积分估计 \(\sum\limits_{x\le \sqrt r}x^{-0.5}\) 这东西是 \(\mathcal{O}(r^{1/4})\) 级别的,所以总和是 \(\mathcal{O}(r^{3/4})\)

于是区间筛部分总复杂度为 \(\mathcal{O}(\frac{r^{3/4}}{\log r}+|U|\log \log r)\)​。


然后找到所有狄利克雷前缀和所需的转移 \((x/p,x)\),按照 \(p\) 排序后,做 \(B\)dp 即可。

复杂度 \(\mathcal{O}(\frac{r^{3/4}}{\log r}+|U|\log \log r+B|U|\omega(r))\),其中 \(|U|\sim\mathcal{O}(B\sqrt r)\)

其中 \(\omega(r)=\max\limits_{x\le r}w(x),w(x)\) 表示不同素因数个数。足以通过此题。

代码好写跑得快。

\(\bf{record}\)

posted @ 2025-01-04 14:33  HaHeHyt  阅读(1034)  评论(4)    收藏  举报