题意简述
给出下列代码:
1 | def F(x, y): |
有 $Q$ 个询问,每个询问两个整数 $x, y$,求 $G(x, y), W(x, y)$。$Q\le 3\times 10^5, x, y\le 10^{18}$。
主要思路
设斐波那契数列为 $f$,$f_0 = f_1 = 1$。
第一问简单,因为最小的 $(x, y)$ 满足 $F(x, y) = k$ 即为 $(f_k, f_{k+1})$。
设满足 $F(x, y) = G(x, y) = k$ 的二元组 $(x, y)$ 为 $k$ 阶高对子。
显然 $k$ 阶高对子数量巨大多,无法直接统计。
但是不难发现许多高对子经过一次迭代就会变得一样,于是试图把这些高对子缩在一起,用一个最小的来表示,称为 $k$ 阶妙对子。
显然,$(x, y)$ 是妙对子当且仅当 $(x, y)$ 是高对子且 $y\le 2x$。
那么 $(x, y)$ 这个妙对子实际上就表示了 $(x, y + i\times x), i\in \mathbf{N}$。
$k$ 阶妙对子的数量很少,是 $O(k)$ 个。
给出前面一些妙对子:
1 | (1, 2) |
仔细一看,$k$ 阶妙对子就是将所有 $k-1$ 阶妙对子 $(x, y)\to (y, x + y)$,再加一个 $(f_{k+1}, f_{k-1} + f_{k+1})$。
然后就可以 $O(\log^2 lim + Q\log lim)$ 了。
参考代码
哦另外要注意的是 $(i, i)$ 均为 $1$ 阶高对子,要特判。
1 |
|