RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-573764

Curtisol's questions

Martin Hope
Curtisol
Asked: 2023-11-18 04:00:02 +0000 UTC

奥林匹克任务-最优选择

  • 6

请帮我解决问题。在我看来,这项任务很艰巨。说实话,我不知道如何解决。虽然有一个想法可以简单地遍历所有战士的组合,但是数量太多了,所以我必须寻求帮助)给我一个解决方案的想法))

问题

你是贝尔兰繁荣首都的快乐市长,但运气不好 - 一个可怕的怪物定居在郊区,并正在攻击在首都和邻近城市之间行驶的贸易商队。为了摆脱怪物,你决定从城市的冒险家公会雇佣一支英雄团队。公会提供 n 个战士,第 i 个战士拥有高生命值单位和低攻击单位。需要杀死的怪物有一定的生命值。

只要怪物还剩下正数的生命值,并且至少一名英雄还剩下正数的生命值,就会发生以下情况:

首先,每个活着的英雄都会对怪物造成相当于其攻击值的伤害。如果怪物的生命值降到零,则战斗结束;然后,如果怪物还活着,它会对每个英雄造成 1 点伤害。每个生命值降至零的英雄都会死亡。由于金库有限,你需要雇佣最少数量的英雄来杀死怪物。但你也不希望队伍中至少有一名英雄死亡,所以你需要招募最少数量的英雄,这样他们才能不损失地击杀怪物。

笔记

在第一组输入数据中,三个英雄就足以无损失地击杀怪物。例如,这些英雄可能是数字2、3、4。他们的总攻击力是6,并且两次攻击就能杀死怪物。

在第一次测试的第二组输入数据中,有一个英雄,他的实力足以立即杀死怪物。

输入格式

输入数据的第一行包含一个整数 t (1 ≤ t ≤ 1000) — 输入数据集的数量。以下是各组的说明。每组的第一行包含整数 a (1 ≤ a ≤ 109) — 怪物的生命值。每组的第二行包含一个整数 n (1 ≤ n ≤ 2⋅105) — 公会提供雇佣的战士总数。每组的第三行包含 n 个整数 h1,h2,…,hn (1 ≤ hi ≤ 109) — 每个英雄的生命值单位。每组第四行包含n个整数d1,d2,…,dn (1 ≤ di ≤ 109)——每个英雄的攻击单位。保证所有输入数据集的n之和不超过2⋅105

输出格式

对于每组输入,在单独的行上打印一个整数:必须雇佣才能无损失地杀死怪物的英雄的最小数量,如果这是不可能的,则为 -1。

例子

Входные данные: 
2
12
5
1 2 3 3 4
2 4 1 1 1
10
1
1
14
Выходные данные:
3
1

哦对了,时间限制是2秒。由于您需要显示所需的战士数量,而不是他们的索引,因此您可能不需要查看所有选项或类似的内容

以@StanislavVolodarskiy的想法为基础,我用python写了这个:

answer = list()
for _ in range(int(input())):
    a = int(input())
    n = int(input())
    hp_war = list(map(int, input().split()))
    d_war = list(map(int, input().split()))
    attack = dict()
    for i in range(n):
        attack[d_war[i]] = attack.get(d_war[i], list()) + [hp_war[i]]
    attack = {key: sorted(attack[key], reverse=True) for key in sorted(attack, reverse=True)}

    max_h_lvl, k = max(hp_war) + 1, n + 1
    h_left, h_level, h_right = 1, max_h_lvl // 2, max_h_lvl
    while True:
        sum_attack, flag, cnt = 0, 0, 0
        for a_w in attack:
            for h_w in attack[a_w]:
                if h_w >= h_level:
                    cnt += 1
                    sum_attack += a_w
                    if sum_attack * h_level >= a:
                        flag = 1
                        break
                    continue
                break
            if flag == 1:
                break
        if flag:
            k = min(k, cnt)
        if h_right - h_left <= 1:
            break
        if flag:
            h_right, h_level = h_level, (h_level + h_left) // 2
        else:
            h_left, h_level = h_level, (h_level + h_right) // 2

    if k == n + 1:
        answer.append(-1)
    else:
        answer.append(k)

for ans in answer:
    print(ans)

在我看来,这是一个有效的解决方案,但在测试系统看来却不是。尽管如此,我还是错过了一些东西。但什么?

олимпиада
  • 2 个回答
  • 101 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5