7-15 死亡隧道 (10 分)

7-15 死亡隧道 (10 分)

题目:

小毛驴要回家了,凭借着刚从老毛驴处学到的闪烁魔法,小毛驴信心满满地出发了。这一次它来到了另一条死亡隧道口,但是,小毛驴不知道死亡威胁随时存在,因为它所打算穿过的这条死亡隧道即将于T秒时间后坍塌。

已知小毛驴行走的速度是每秒17米,而小毛驴拥有的闪烁法术可以使它在1秒内移动60米,不过每次使用闪烁法术都会消耗魔法值10点。小毛驴也掌握了魔法恢复技能,但是必须通过原地休息来实现,且魔法值恢复的速度为每秒4点。

已知小毛驴当前的魔法初值为M,死亡隧道的长度为S,隧道将于T秒时间后坍塌。

请你帮助小毛驴计算能否成功穿越隧道,若不能穿过,也请你计算小毛驴在T秒时间内能走的最远距离。

说明: 1)当前小毛驴刚刚踏入隧道口,若在T秒时间内的移动距离大于等于S米的话,就算成功。 2)小毛驴行走、闪烁或者休息均以秒为单位。

输入样例:
4
40 240 4
40 241 4
39 200 4
36 255 10
输出样例:
Yes 4
No 240
No 197
Yes 6

在这里插入图片描述
代码:

#include <stdio.h>
#include <stdlib.h>
int n,m,s,t;///魔法初值为M,死亡隧道的长度为S,隧道将于T秒时间后坍塌
int flag=0;
int judge()
{
    int dis=0;
    int i=1;
    for(; i<=t; i++)
    {
        if(m>=10)//有魔法值,就用
        {
            dis+=60;
            m-=10;
        }
        else//先判断时间,后判断距离
        {
            int last_dis=s-dis;//剩余距离
            int last_time=t-i+1;//剩余时间
            int wait_time=(10-m)/4+1;//等到使用魔法的时间: 回复所用时间+使用魔法的时间
            if((10-m)%4!=0)
                wait_time+=1;
            if(wait_time>last_time)//当剩余时间last_time<等到使用魔法的时间wait_time时,那么步行
                dis+=17;
            else
            {
                int walk_time=last_dis/17;//剩余距离步行所用时间
                if(last_dis%17!=0)
                    walk_time+=1;
                if(walk_time<=wait_time)//如果在剩余距离里步行走完所用时间比等到使用魔法的时间小,那么久步行
                    dis+=17;
                else//否则 回复能量
                    m+=4;
            }
        }
        if(dis>=s)
        {
            flag=1;
            break;
        }
    }
    if(flag==1)
        return i;//所用时间
    else
        return dis;//最大距离
}
int main()
{
    scanf("%d",&n);
    for(int i=0; i<n; i++)
    {
        scanf("%d%d%d",&m,&s,&t);
        flag=0;
        int x=judge();
        if(flag==1)
            printf("Yes %d\n",x);
        else
            printf("No %d\n",x);
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baibai___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值