https://vjudge.net/problem/CodeForces-1296D
思路:有
只怪兽,第
只血量为
,你和小明轮流对第
只怪兽进行攻击,你的攻击力为
,他的攻击力为
,如果你杀死了第
只怪兽,你获得
分,否则不得分,然后你们开始攻击第
只怪兽……同时你有
次机会使得小明跳过
回合,问你最多能获得几分。
思路:贪心, 对 取模,如果取模后 为 ,那么应该令 ,然后对其进行判断,如果 ,那么 ,否则我们只能消耗机会令 不断减小直到其 ,根据贪心策略, 越小越好,所以把这些没有贡献的拿出来从小到大排序再算一遍就行。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
int n,a,b,k;
int h[maxn],c[maxn];
int main()
{
scanf("%d %d %d %d",&n,&a,&b,&k);
int tmp=a+b,ans=0,len=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&h[i]);
h[i]%=tmp;
if(!h[i])
h[i]=tmp;
if(h[i]<=a)
++ans;
else
c[len++]=h[i];
}
for(int i=0;i<len;i++)
c[i]=ceil(c[i]*1.0/a)-1;
sort(c,c+len);
for(int i=0;i<len;i++)
{
if(k<c[i])
break;
k-=c[i];
++ans;
}
printf("%d\n",ans);
return 0;
}