BZOJ1816(Cqoi2010)[扑克牌]--二分答案
程序员文章站
2022-05-08 17:54:27
...
【链接】
bzoj1816
【解题报告】
二分答案,然后验证就行了。
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=55;
int n,m,L,R,a[maxn];
bool Check(int x)
{
int t=min(x,m);
for (int i=1; i<=n; i++)
{
if (a[i]<x) t-=x-a[i];
if (t<0) return 0;
}
return 1;
}
int main()
{
freopen("1816.in","r",stdin);
freopen("1816.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1; i<=n; i++) scanf("%d",&a[i]);
L=0; R=1000000000;
while (L<=R)
{
int mid=(R-L>>1)+L;
if (Check(mid)) L=mid+1; else R=mid-1;
}
printf("%d",R);
return 0;
}
推荐阅读