本题要求对于每个给定的 k,找到最小的页码 n,使得从第 1 页到第 n 页所有页码的十进制表示中,数字 0 出现的总次数 f(n)≥k。数据组数 t≤1000,k≤1013。
首先注意到 f(n) 是一个单调不减函数:页码越多,数字 0 出现的次数不会变少。因此我们可以采用二分答案的方法:确定一个足够大的上界 R,在 [1,R] 范围内二分查找第一个使 f(n)≥k 的位置。由于 k≤1013,而数字 0 的出现频率大约为十分之一,满足条件的 n 不会超过 1014 量级,实际可将上界设为 1015 或更大以保证安全。
二分过程中需要快速计算 f(n),即 1 到 n 之间所有整数包含的数字 0 的总个数(不含前导零)。这个问题可以使用**数位动态规划(数位 DP)**高效求解,复杂度与 n 的十进制位数相关,约为 O(log10n)。
具体计算 f(n) 的方法如下:
一位统计学家正在翻阅一本从第 1 页开始、页码无限延伸的书籍。定义 f(n) 为从第 1 页到第 n 页所有页码的十进制表示中,数字 0 出现的总次数。
现有 t 次独立的询问,每次询问给定一个正整数 k。请你找出最小的页码 n,使得 f(n)≥k。
数据范围:询问次数 t 不超过 1000,每次给定的 k 不超过 1013。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册