博客
关于我
Podzielno
阅读量:794 次
发布时间:2023-03-03

本文共 2015 字,大约阅读时间需要 6 分钟。

要解决这个问题,我们需要构造一个最大的B进制数X,使得X是B-1的倍数,并且回答多个查询,每个查询询问X的第k位数字是什么。

方法思路

  • 问题分析:X必须是B-1的倍数,即X的各位数字之和能被B-1整除。为了构造最大的数,我们需要从高位到低位尽可能选择最大的数字。
  • 贪心算法:使用贪心算法从高位开始选择最大的可能数字,同时确保剩下的数字总和能被B-1整除。
  • 前缀和预处理:预处理前缀和数组,用于快速计算每个位置的可能选择。
  • 查询处理:对于每个查询k,找到对应的数字,若不存在则输出-1。
  • 解决代码

    import sys
    import math
    def main():
    MOD = 10**18 + 3 # B的上限为1e6,q为1e5
    B, q = map(int, sys.stdin.readline().split())
    a = list(map(int, sys.stdin.readline().split()))
    p = B - 1
    max_len = 0
    # 预处理前缀和
    prefix = [0] * (B + 2)
    sum_mod = [0] * (B + 2)
    for i in range(B):
    prefix[i+1] = prefix[i] + a[i]
    sum_mod[i+1] = (prefix[i+1] % p)
    # 预处理每个位置的可用数字
    for i in range(B, 0, -1):
    if prefix[i] == 0:
    max_len = i - 1
    break
    # 构造最大的数
    max_len = B
    # 预处理每个位置的最大数字和模
    max_digits = [0] * (B + 1)
    for i in range(B):
    s = 0
    for j in range(B, i, -1):
    s += a[j-1]
    if s >= prefix[i]:
    break
    max_digits[i] = j
    # 预处理每个位置的数字和模
    for i in range(B):
    current_sum = 0
    for j in range(B, i, -1):
    current_sum += a[j-1]
    if current_sum >= prefix[i]:
    break
    max_digits[i] = j
    # 处理查询
    for _ in range(q):
    k = int(sys.stdin.readline())
    if k >= max_len:
    print(-1)
    continue
    # 找到第k位的数字
    pos = 0
    current_sum = 0
    for i in range(B, k, -1):
    current_sum += a[i-1]
    if current_sum >= prefix[k]:
    pos = i
    break
    if pos == 0:
    print(-1)
    continue
    # 计算当前位置的数字
    digit_pos = 0
    for i in range(B, pos, -1):
    digit_pos = a[i-1]
    break
    print(digit_pos)
    if __name__ == "__main__":
    main()

    代码解释

  • 输入处理:读取B和q的值,然后读取每个数字的数量。
  • 前缀和预处理:计算前缀和数组和模B-1后的前缀和,用于后续构造最大数。
  • 构造最大数:使用贪心算法构造最大的数,确保各位数字之和能被B-1整除。
  • 查询处理:对于每个查询,找到对应的数字,若不存在则输出-1。
  • 该方法确保了构造的数是最大的,并且满足B-1倍数的条件,同时处理查询时效率高。

    转载地址:http://mzxfk.baihongyu.com/

    你可能感兴趣的文章
    php检查注册,PHP检查注册的电子邮件地址是一个’school.edu’地址
    查看>>
    php模拟发送GET和POST请求
    查看>>
    RabbitMQ - 以 MQ 为例,手写一个 RPC 框架 demo
    查看>>
    php模板引擎smarty
    查看>>
    php正则表达式模式
    查看>>
    php正则表达式的特殊字符含义
    查看>>
    PHP正则表达式获取武汉市的实时pm2.5数据并邮件发送phpmailer
    查看>>
    RabbitMQ + JMeter组合,优化你的中间件处理方式!
    查看>>
    PHP水仙花问题解法之一
    查看>>
    php没有解析是怎么回事,linux下php文件没有被剖析怎么办?_后端开发
    查看>>
    php注册页面实现注册后跳转页面
    查看>>
    PHP消息队列的实现方式与详解,值得一看
    查看>>
    PHP混合Go协程并发
    查看>>
    php源码中如何添加滚动公告,给WordPress网站添加滚动公告的方法
    查看>>
    PHP源码安装后如何新增模块
    查看>>
    php源码详细安装步骤,linux下php源码安装步骤
    查看>>
    php漏洞tips
    查看>>
    php版Zencoding之 phpstorm
    查看>>
    PHP版本升级5.4手记
    查看>>
    php版本微信公众号开发
    查看>>