P2006 赵神牛的游戏

赵神牛的游戏

题目描述

在 DNF 中,赵神牛有一个缔造者,他一共有 k 点法力值,一共有 m 个技能,每个技能耗费的法力值为 ai,可以造成的伤害为 bi,而 boss 的体力值为 n,请你求出它放哪个技能,才可以打死 boss。

当然,赵神牛技术很菜,他一局只放一个技能,不过每个技能都可以放无数次。

输入格式

第一行有三个整数,分别表示 k,m,n

后面 m 行,每行两个整数,第 (i+1) 行的整数表示耗费的法力值 ai 和造成的伤害 bi

输出格式

输出仅一行,既可以杀死 boss 的技能序号,如果有多个,按从小到大的顺序输出,中间用一个空格隔开;如果没有技能能杀死 boss,输出 -1

样例 #1

样例输入 #1

100 3 5000
20 1000
90 1
110 10000

样例输出 #1

1

样例 #2

样例输入 #2

50 4 10
60 100
70 1000
80 1000
90 0

样例输出 #2

-1

提示

数据规模与约定

对于全部的测试点,满足:

  • 0n,m,k3×104,
  • 0ai,bi2147483647

我的代码

遇到了错误

Runtime Error.
Received signal 8: Floating-point exception.

为何呢?因为出现了除数为0的情况,这里的skills[i].a == 0是有可能的

解决: if (skills[i].a == 0 || (k / skills[i].a) * skills[i].b >= n)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct skill
{
    int a;
    int b;
} Skill;

int main()
{
    int k, m, n, num = 0;

    scanf("%d %d %d", &k, &m, &n);

    Skill *skills = (Skill *)malloc(m * sizeof(Skill));
    int *count = (int *)malloc(m * sizeof(int));

    if (skills == NULL)
    {
        printf("内存申请失败");
        return 1;
    }
    memset(skills, 0, m * sizeof(Skill));

    for (int i = 0; i < m; i++)
    {
        scanf("%d %d", &skills[i].a, &skills[i].b);
        if (skills[i].a == 0 || (k / skills[i].a) * skills[i].b >= n)
        {
            count[num] = i + 1;
            num++;
        }
    }

        if (num == 0)
        printf("-1");
    else
    {
        for (int i = 0; i < num; i++)
            printf("%d ", count[i]);
    }
    return 0;
}

posted @   DawnTraveler  阅读(140)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示