【PR #4】到底有没有九
给定整数 \(n\) 和 \(k\)。定义整数 \(x\) 是好的,当且仅当 \(x\) 满足下列条件:
- \(x \times (10^k - 1)\) 的十进制表示中不包含 \(9\)。
求第 \(n\) 个好的整数 \(x\),其中 \(1 \leq k \leq 18\),\(1 \leq n \leq 10^{18}\)。
考虑刻画 \(x \times (10^k - 1)\) 的值,令 \(y = x \times (10^k - 1)\)。
则此时需要让 \(y\) 的十进制表示中不包含 \(9\),且 \(y\) 是 \(10^k - 1\) 的倍数。
记第 \(n\) 个 \(x\) 为 \(x_0\),第 \(n\) 个 \(y\) 为 \(y_0\),则 \(y_0 = x_0 \times (10^k - 1)\)。
也就是说,我们只需要算出 \(y_0\) 即可。
- 结论 \(1\):\(y_0\) 的位数是 \(O(k + \log n)\) 的。
不包含 \(9\) 的 \(t\) 位数约有 \(9^t\) 个,其不是 \(10^k - 1\) 的倍数的概率约为 \(10^{-k}\)。
也就是说,\(t\) 位数中满足条件的 \(y\) 约有 \(\dfrac{9^t}{10^k}\) 个。
考虑 \(\dfrac{9^t}{10^k}\) 约为 \(n\),即 \(9^t\) 约为 \(10^k \times n\)。
也就是说,\(t\) 约为 \(\log_9(10^k \times n)\),即 \(t\) 是 \(O(k + \log n)\) 的。
不妨钦定 \(y\) 的位数为 \(t\),不足时在高位补 \(0\)。
考虑常见的套路,我们逐位确定答案。
记 \(y = \overline{y_1 y_2 \dots y_t}\),我们要回答 \(O(k + \log n)\) 次下面的询问:
- 给定 \(y_1,y_2,\dots,y_p\),求此时合法的 \(y\) 个数。
考虑小学奥数经典结论:
- 将 \(y\) 从最低位开始 \(k\) 位一断,所有段的和 \(s\) 与 \(y\) 在模 \(10^k - 1\) 意义下同余。
由于 \(k\) 和 \(t\) 很小,分成的段数不会很多。
从低往高填数即可,进行 dp,复杂度不知道,反正能过。

浙公网安备 33010602011771号