正文
HDU 4950 Monster
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
题目链接
题意:有一个怪物的血量为h,人攻击怪物,每回合可以杀掉a滴血,再回b滴血,k个回合之后人会休息一回合,即人不攻击而怪物回b滴血,问能否杀死。翻译过来就是给定一个数h,每轮可以先减a再加b,k轮后会有一轮只加b不减a,如果再这过程中存在h<=0就输出YES,否则输出NO。
题解:注意是先减a再加b,有可能不加b就已经h<=0,先分类讨论ab,如果a>b,那么只有可能第一回合杀死,一旦+b就不可能在杀死了,如果a<=b,讨论在经过k-1轮后第k轮只减不加能否<=0,再讨论k+1轮的净增长量是正还是负即可,负就是YES,否则是NO。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long ll;
int cas=;
void pra()
{
printf("Case #%d: YES\n",cas++);
}
void prb()
{
printf("Case #%d: NO\n",cas++);
}
int main()
{
ll a,b,k,h;
while(scanf("%lld%lld%lld%lld",&h,&a,&b,&k)!=EOF)
{
if(h==&&a==&&b==&&k==) break;
if(a<b)
{
if(a>=h) pra();
else prb();
}
else
{
ll c=a-b;
ll sum=k*(a-b)-b;
if(c*(k-)+a>=h) pra();
else if(sum>) pra();
else prb();
}
}
return ;
}