傳智杯 補刀

題目鏈接

在這裏插入圖片描述

題意:

敵人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;
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章