题解:二分,然后乱搞~
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int n;
int c[60];
int solve(int x)
{
int i,sum=0;
for(i=1;i<=n;i++)
{
if(c[i]<x) sum+=x-c[i];
if(sum>x||sum>c[0]) return 0;
}
return 1;
}
int main()
{
scanf("%d%d",&n,&c[0]);
int i,l=1<<30,r=0,mid;
for(i=1;i<=n;i++) scanf("%d",&c[i]),l=min(l,c[i]);
r=c[0]+l+1;
while(l<r)
{
mid=l+r>>1;
if(solve(mid)) l=mid+1;
else r=mid;
}
printf("%d",l-1);
return 0;
}
原文:http://www.cnblogs.com/CQzhangyu/p/6871501.html