• HDU 4866 Shooting


    题目链接:戳我

    题目大意:

    射击游戏,玩家站在 X 轴上面,即坐标是[X, 0], 有 N 个目标,每次可以射击 会击中最近的 K 个目标,目标 是平行于 X 的线段, 有M次射击机会,每次射击的得分 是 这K个目标 与 X轴的距离和,如果上一次的得分超过了 P, 那么这次得分就是翻倍。K = (a × Pre + b) % c,Pre为上次的射击得分。Pre初始为 1

    求 每次 射击 的 得分

    样例解释:

    4 3 5 8  //分别是 N, M, X,P 即 目标的个数,射击的次数, 玩家所在 X 轴最大为 X ,即其坐标不会超过X,P 就是上面描述 ,接下来先是 N行 和 M行

    1 2 6   // 分别是 L, R, D, 即线段的起始点是(1,6),终止点是(2, 6),与 X 轴距离为 6,设这个线段名字为a

    2 3 3  // 分别是 L, R, D, 即线段的起始点是(2,3),终止点是(3, 3),与 X 轴距离为 3,设这个线段名字为b

    2 4 7  // 分别是 L, R, D, 即线段的起始点是(2,7),终止点是(4, 7),与 X 轴距离为 7,设这个线段名字为c

    1 5 2  // 分别是 L, R, D, 即线段的起始点是(1,2),终止点是(5, 2),与 X 轴距离为 2,设这个线段名字为d

    2 2 1 5 // 分别是 x,a,b,c 即 本次射击的 坐标是[x, 0],因为k = (2 * 1 + 1) % 5 = 3,可以击中最近3条,故击中的是a,d,d,得分为6+2+3=11

    3 1 1 10 // 此次的 k = (1 * 11 + 1) % 10 = 2,可以击中最近的2条,故击中 b,d,且上一次得分超过了 P ,得分翻倍,为(3+2)* 2 = 10

    4 2 3 7 // 此次的 k = (2 * 10 + 3 ) % 7 = 2,可以击中最近的两条,因为他的坐标是[4, 0]故击中d,c,且上一次得分超过了 P ,得分翻倍,为(2 + 7 ) * 2  = 18

    解题思路:

    主席树

    代码:

  • 相关阅读:
    任务信息的高级选项(Project)
    延时间隔(Project)
    在【自定义列】中使用M函数(Power Query 之 M 语言)
    在对话框中设置前置任务(Project)
    前置任务(Project)
    拖动条形图设置任务关联(Project)
    2020最新移动,联通,电信号码正则
    2019最新移动,联通,电信号码正则
    原生js判断手机端页面滚动停止
    win10下vue-devtools的安装和使用
  • 原文地址:https://www.cnblogs.com/tenlee/p/4657318.html
Copyright © 2020-2023  润新知