1 条题解
-
0
1. 题意翻译
给定三个非负整数 a,b,k,集合
定义
$$T = {(x, y) \mid x \in \mathbb{N},\ y \in \mathbb{N},\ x^2 \in S,\ y^3 \in S,\ |x^2 - y^3| \le k} $$其中 N 表示非负整数(通常包括 0,但这里 a≥1,所以 x,y 至少是 1 的情况)。
要求计算 ,即满足条件的 (x,y) 对的数量。
2. 条件分析
条件为: 1.,即 。 2.,即 。 3.。
3. 直接枚举的不可行性
数据范围 a,b≤ ,意味着 x 最大可能到 左右,y 最大可能到 左右,因为: ,。 如果直接枚举 x 和 y,复杂度为 O(⋅),最坏情况 不可接受。
4. 优化思路
注意到 意味着:
我们可以枚举 y,因为 y 的范围较小(最多 级别)。
对于每个 y,计算 ,然后找满足 且在区间 内的整数 x。
4.1 枚举
y 的范围 y 需满足 ,所以:
$$y_{\min} = \lceil a^{1/3} \rceil,y_{\max} = \lceil b^{1/3} \rceil $$这里注意 y 是自然数(从 0 还是 1 开始?题中 a≥1,所以 y=0 时 不在 S 中,除非 a=0 但 a≥1,所以 y≥1)。
4.2 对于固定的 y,求 x 的范围
条件:
并且 x 是自然数。
设:
如果 L>R,则没有 x 满足条件。
否则,x 的范围是:
$$x_{\min} = \lceil \sqrt{L} \rceil,x_{\max} = \lceil \sqrt{R} \rceil $$然后这个 y 贡献的数目是 。
4.3 特殊情况 k=0
当 k=0 时,条件变成 ,即求 的自然数解。 设 ,只需枚举 t 使得 ,然后数 t 的个数即可。
5. 算法步骤
1.若 k=0: 计算 $ t_{\min} = \lceil a^{1/6} \rceil, t_{\max} = \lceil b^{1/6} \rceil $。
答案 =
2.若 k>0:
初始化 ans=0。
计算 $y_{\min} = \lceil a^{1/3} \rceil,y_{\max} = \lceil b^{1/3} \rceil$
对每个 : 计算 ycube= 。
L=max(a,ycube−k),R=min(b,ycube+k)。
如果 L>R,跳过。 $x_l = \lceil \sqrt{L} \rceil,x_r = \lceil \sqrt{R} \rceil$
如果 xl≤xr,则 ans+=(xr−xl+1)。
输出 ans。
6. 复杂度分析
k=0 时:直接计算 O(1)。
k>0 时:枚举 y 的个数最多 O((-)+1),当 b= 时,=,可接受。
7. 最终公式
$$\text{Answer} = \begin{cases} \max\left(0, [ \sqrt[6]{b} ] - [ \sqrt[6]{a} ] + 1 \right), & k = 0 \\ \sum_{y = \lceil a^{1/3} \rceil}^{\lfloor b^{1/3} \rfloor} \max\left(0, \left\lfloor \sqrt{\min(b, y^3 + k)} \right\rfloor - \left\lceil \sqrt{\max(a, y^3 - k)} \right\rceil + 1 \right), & k > 0 \end{cases} $$
- 1
信息
- ID
- 3644
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者