1816: [Cqoi2010]扑克牌
题目:传送门
题解:
被一道毒瘤题搞残了...弃了坑来刷刷水题
一开始还想复杂了...结果发现二分水过:
二分答案...然后check一下,joker肯定尽量用mid次,那么哪种牌不够就补(因为每次只能补一种,所以如果次数用完就return false)
代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m,ans;
int a[];
bool check(int x)
{
int s=min(m,x);
for(int i=;i<=n;i++)
{
if(a[i]<x)
{
s=s-(x-a[i]);
if(s<)return false;
}
}
return true;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
int l=,r=;ans=;
while(l<=r)
{
int mid=(l+r)/;
if(check(mid)==true)
{
l=mid+;
ans=mid;
}
else r=mid-;
}
printf("%d\n",ans);
return ;
}