ABC 随笔

ABC428

B

map

C

A₁ = A₀ + (1 若 S₁ = '(',否则 -1)

D

考虑 (C+x) 有 d 位数字的情况。此时 x 必须满足以下区间的交集:

1 ≤ x ≤ D

10^{d-1} - C ≤ x ≤ 10^d - 1 - C

令 L = max(1, 10^{d-1} - C),R = min(D, 10^d - 1 - C)。
如果 L > R,则不存在这样的 x;如果 L ≤ R,则 x 的取值范围为 L ≤ x ≤ R。

由于我们假设 (C+x) 有 d 位数字,因此 f(C, C+x) = C × 10^d + (C + x)。
因此,该区间内的答案即为在 [C × 10^d + C + L, C × 10^d + C + R] 范围内的完全平方数的数量。

由于小于等于 k 的完全平方数的数量为 ⌊√k⌋,所需计数可表示为:

⌊√(C × 10^d + C + R)⌋ - ⌊√(C × 10^d + C + L - 1)⌋

为求 ⌊√k⌋,使用 std::sqrt 比二分查找更快。

原问题的答案可通过将上述计算中 d = 1, …, ⌊log₁₀(C + D)⌋ + 1 的计数求和得到。

假设平方根计算可在常数时间内完成,时间复杂度为 O(log(C + D)),足以满足要求。

E

考虑通过以下过程构建一个新树(我们称之为扩展图):

首先,在原树的基础上添加顶点 1′, 2′, …, N′。

接着,对每个 i = 1, 2, …, N,在顶点 i 与 i′ 之间添加一条长度为 i′ × 10^−100 的边。

此时可以看出,每个顶点 u 的答案可通过求扩展图中距离 u 最远的顶点(去掉撇号后)得到。

不用lca

posted @ 2025-10-18 22:30  Sqqqz185  阅读(12)  评论(0)    收藏  举报