题意:
n个怪兽,每个怪兽有一个血量,然后你和另一个人轮流打怪兽,你和另一个的攻击力分别为 a,b
如果怪兽在你打的时候死了,得一分,其他的不得分
现在你有k次机会,可以让另一个人跳过他的回合
问最多能得多少分
思路:
贪心,正常能让自己的回合下杀死的,不用消耗k
如果不能,那就只能让另一个人跳过他的回合,为了能得更多分,尽可能把两个人轮流攻击之后,剩余血量少的时候让对手跳过他的回合,以便被自己击杀得分
代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
#include <math.h>
#include <map>
#include <queue>
#include <set>
#define Pll make_pair
using namespace std;
typedef long long ll;
const int maxn=2e5+50;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
const int phi=1e9+6;
int p[maxn];
int main()
{
int t,n,k,a,b;
scanf("%d%d%d%d",&n,&a,&b,&k);
int cnt=0;
int ans=0;
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
x%=a+b;
if(x==0)p[++cnt]=b;//刚好被b杀死了,之前还剩b滴血
else if(x<=a)ans++;//本来能在自己的回合杀死
else if(x>a) p[++cnt]=x-a;//a<x<a+b,本来就轮到你了,所以就减a
}
sort(p+1,p+cnt+1);
for(int i=1;i<=cnt;i++){
int l=p[i]/a;
if(p[i]%a!=0)l++;
if(k-l>=0)ans++,k-=l;
if(l<=0)break;
}
printf("%d\n",ans);
return 0;
}