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;
}① 处应填( )。
选项(单选)
答案解析
详细答案解析为会员权益,按每日次数查看。
开通 / 升级会员
上一题
下一题