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".
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).
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; }