击杀怪兽

14 篇文章 0 订阅
8 篇文章 0 订阅

Monster

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 455    Accepted Submission(s): 188


Problem Description
Teacher Mai has a kingdom. A monster has invaded this kingdom, and Teacher Mai wants to kill it.

Monster initially has h HP. And it will die if HP is less than 1.

Teacher Mai and monster take turns to do their action. In one round, Teacher Mai can attack the monster so that the HP of the monster will be reduced by a. At the end of this round, the HP of monster will be increased by b.

After k consecutive round's attack, Teacher Mai must take a rest in this round. However, he can also choose to take a rest in any round.

Output "YES" if Teacher Mai can kill this monster, else output "NO".
 

Input
There are multiple test cases, terminated by a line "0 0 0 0".

For each test case, the first line contains four integers h,a,b,k(1<=h,a,b,k <=10^9).
 

Output
For each case, output "Case #k: " first, where k is the case number counting from 1. Then output "YES" if Teacher Mai can kill this monster, else output "NO".
 

Sample Input
  
  
5 3 2 2 0 0 0 0
 

Sample Output
  
  
Case #1: NO
此题一处,引各大高手齐声赞道:TMD,出题人英语真好!!!
题意:一人去击杀怪兽,怪兽的血量为 h,勇士每次攻击击杀血量为 a,
攻击之后怪兽恢复血量 b,一个回合的攻击为k次,勇士必须在k次攻击内或者
k次攻击之后休息一次。而此时,怪兽会自我恢复,当怪兽血量为小于1时,
怪兽就会死亡。
(可以进行多个回合)
分析:按照题目要求:要想击杀怪兽。可能有三种情况,
1:血量比较低,一次击杀就杀死了怪兽。(a>=h)
2:血量比较高,需要多个回合,这样,就只用保证,一个回合的击杀血量大于
恢复血量。 ((a*k)>b*(k+1))
3.在一个回合之内杀死了怪兽。这种情况就要保证一个回合的最后一次情况
必须杀死或者已经杀死怪兽。 (a*k-b*(k-1)>=h)
下面是代码实现:
#include<stdio.h>
int main()
{
   __int64 a,b,c,d;
   int k=0;
    while(scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&d)!=EOF)
    {
        k++;
        if(a==0&&b==0&&c==0&&d==0)
        break;
        else
        {
        if(b>=a)
        printf("Case #%d: YES\n",k);
        else if(b*d>c*(d+1))
        printf("Case #%d: YES\n",k);
        else if(b*d-c*(d-1)>=a)
        printf("Case #%d: YES\n",k);
        else
        printf("Case #%d: NO\n",k);
        }

    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值