大吉大利今晚吃鸡——跑毒篇

本文通过模拟算法解决了一个关于角色生存挑战的问题。角色在不同生命值下行走,并考虑是否使用补给品,最终判断能否到达指定位置。文章详细介绍了算法实现的思路与核心代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:点击打开链接

问题

1. 边界部分恰好擦着的时候到底是死是活.......写到程序里就是有没有=的问题。

首先题目里明确指出打包的时候擦着就是死。

然后后面有个带着你理解第二个样例的部分,这个样例是有目的,是告诉你当你最后一步到边界时(只剩下一步)却只剩下一丝血是能活下来的。


2.思路难道真的是模拟?我没有,而只是把能走的最长距离算出来,然后和b比较一下就好啦。


更具体的注意点看注释吧。


贴代码:

#include <iostream>
using namespace std;

int main()
{
    int T;
    int a, b, c;

    cin >> T;

    for(int i = 1; i <= T; i++)
    {
        cin >> a >> b >> c;

        //这几个m是核心时间
        //m100直接走不打包最多能走几米,注意光走是向上取整
        int m100 = (100 + a - 1) / a;
        //m40是打包的话能走多远,打包向下取整
        int m40 = (100 - (float)a*6 ) / a;
        //这两个是80血量,同上
        int m80 = (80 + a - 1 )/ a;
        int m20 = (80 - (float)a*6 ) / a;

        //打包情况下,如果是整除就要减一
        if((100 - a*6) % a == 0)
            m40--;
        if((80 - a*6) % a == 0)
            m20--;

        //cout << m100<<' '<<m40<<' '<<m80<<' '<<m20<<endl;

        //下面和b比较的都没有=,因为等于是能活的
        //和6比较都有=,因为打包不能擦着

        //直接走不打包的情况:打包没掉血快或者根本没包
        if( m100 <= 6 || c == 0 ){
            if(m100 < b)
                cout << "NO\n";
            else
                cout << "YES\n";
            continue;
        }//打了一次包后在80血量的情况下掉血比再打包快
        else if(m80 <= 6){
            if(m40 + m80 < b)
                cout << "NO\n";
            else
                cout << "YES\n";
            continue;
        }
        else{//把所有包都用了后能走的最远距离
            if(m40 + (c-1)*m20 + m80 < b)
                cout << "NO\n";
            else
                cout << "YES\n";
            continue;
        }
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值