題目鏈接
題意:
敵人h滴血, 防禦塔攻擊x, 英雄攻擊y。問如何攻擊可以使得英雄可以達到最後擊殺的效果。
思路:
分類討論:
當x爲0時, y爲0時的情況。
然後計算防禦塔攻擊一共需要幾次。
所謂補刀, 則英雄一定是要有一擊的,假設英雄攻擊了n次,DefendTower 攻擊了m次。則必有
n * y + x * m >= h。
我們可以預先算出防禦塔總共需要攻擊幾次 ans = h / x;
因爲最後一擊必須由英雄擊殺, 所以如果整除的話, ans要減一。
然後按照枚舉n * y + x * m >= h即可。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
for(int i = 1;i <= t;i++)
{
long long h, x, y;
cin >> h >> x >> y;
if(x == 0 && y != 0)
{
cout << "Yes" << endl;
continue;
}
if(y == 0)
{
cout << "No" << endl;
continue;
}
long long ans = h / x;///防禦塔ans次擊敗,
if(h % x == 0)ans--;
long long cnt = 1;int flag = 0;
for(int i = 1;i <= ans + 1;i++)///總次數英雄是可以比防禦塔多攻擊一次的。
{
if(ans * x + y * cnt>= h)
{
flag = 1;
break;
}
cnt++;
}
if(flag)cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}