测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A23506. 消灭怪兽有 n 个怪兽,每个怪兽血量为 hp。每次可以任意选择一个还存活的怪兽进行攻击,被选择的怪兽受到 A 点伤害,其他还存活的怪兽也同样会受到 B 点溅射伤害。当一个怪兽的血量降到 0 或以下时就会消失,求最少需要进行多少次攻击可以消灭所有怪兽。数据范围满足 (1 ≤ \leq≤ n ≤ \leq≤ 10 5 ^5 5 , 1 ≤ \leq≤ B < A ≤ \leq≤ 10 9 ^9 9 …

单选题 较易

题目描述

消灭怪兽

有 n 个怪兽,每个怪兽血量为 hp。每次可以任意选择一个还存活的怪兽进行攻击,被选择的怪兽受到 A 点伤害,其他还存活的怪兽也同样会受到 B 点溅射伤害。当一个怪兽的血量降到 0 或以下时就会消失,求最少需要进行多少次攻击可以消灭所有怪兽。

数据范围满足 (1 ≤ \leq≤ n ≤ \leq≤ 10 5 ^5 5 , 1 ≤ \leq≤ B < A ≤ \leq≤ 10 9 ^9 9 , 1 ≤ \leq≤ hp_1 ≤ \leq≤ 10 9 ^9 9 )。

提示:可以采用二分答案的方法来求解。

试补全程序。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
typedef long long ll;
ll hp[N];
int n;
ll a,b;
bool check(ll x){
    ll cnt=x;
    for(int i=1;i<=n;i++){
        ll res_hp=__①__;
        if(res_hp>0){
            ll cnta=__②__;
            if(__③__) cnta++;
            cnt-=cnta;
            if(cnt<0) break;
        }
    }
    return __④__;
}
int main(){
    cin>>n>>a>>b;
    for(int i=1;i<=n;i++) cin>>hp[i];
    ll l=1,r=1e9;
    while(l<=r){
        ll mid=l+r>>1;
        if(check(mid)) r=mid-1;
        else l=mid+1;
    }
    cout<<__④__<<endl;
    return 0;
}

① 处应填(    )。


选项(单选)

上一题 下一题