bzoj1816: [Cqoi2010]扑克牌(二分答案判断)

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 ;
}
上一篇:[iOS Animation]-CALayer 显示动画


下一篇:简单dp --- HDU1248寒冰王座