D. Fight with Monsters
题目链接-Fight with Monsters
题目大意
有n个怪兽,你和其他一名玩家轮流攻击怪兽(自己先手),攻击力分别为a,b。你有k次机会使另外一名玩家跳过他的回合,问自己最多能杀多少只怪兽
解题思路
贪心
设对每个怪兽要想得分可跳过的次数为x,则满足h%(a+b)≤(x+1)*a,即需跳过的最小次数xmin=(h%(a+b))/a-1;将对于每个怪兽需要跳过的次数从小到大排序,最后遍历即可
附上代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int INF=0x3f3f3f;
const int N=2e5+5;
typedef pair<int,int> PII;
int h[N];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n,a,b,k;
cin>>n>>a>>b>>k;
int s=a+b;
for(int i=1;i<=n;i++){
cin>>h[i];
// if(h[i]<=a){
// h[i]=0;
// continue;
// }有没有这段代码都没有影响
h[i]%=s;
if(h[i]==0)
h[i]=s;
if(h[i]%a==0)
h[i]=h[i]/a-1;
else
h[i]=h[i]/a;
}
sort(h+1,h+n+1);
int ans=0;
for(int i=1;i<=n;i++){
if(h[i]<=k){
k-=h[i];
ans++;
}
else
break;
}
cout<<ans<<endl;
return 0;
}