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

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

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

方法思路

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

    import sysimport mathdef 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/

    你可能感兴趣的文章
    Power English (1) 原文
    查看>>
    power English (3)原文
    查看>>
    POWER ENGLISH(7)- repetition
    查看>>
    SpringBoot中集成SpringBatch详细解析与实战示例(CSV文件读取十万条数据进行业务处理后写入Mysql数据库)
    查看>>
    powerbi 一张表在另外一张表中出现的数量_PowerBi之初步学习笔记
    查看>>
    QGIS怎样设置简体中文以及新建可编辑的多边形的图层
    查看>>
    PowerBuilder 使用自定义事件触发键盘Enter事件
    查看>>
    PowerCreatorCMS UploadResourcePic 任意文件上传漏洞复现
    查看>>
    PowerDesigner 使用的一些技巧(转)
    查看>>
    QGIS在Windows上下载安装与建立空间数据库连接
    查看>>
    PowerDesigner165安装婆姐汉花教程
    查看>>
    PowerDesigner使用教程:设置注释、默认值属性
    查看>>
    PowerDesigner使用教程:不显示背景网格
    查看>>
    PowerDesigner使用教程:创建数据模型以及导出
    查看>>
    PowerDesigner使用教程:右侧工具栏显示/隐藏
    查看>>
    PowerDesigner使用教程:导出sql文件以及解决中文乱码问题
    查看>>
    PowerDesigner使用教程:时间字段设置
    查看>>
    PowerDesigner使用教程:给字段添加唯一约束
    查看>>
    QGIS中怎样设置图层样式并导出地图样式
    查看>>
    PowerDesigner使用笔记
    查看>>