题目
分析
k可能的最大值就是,初始时候的最大人数max加上过来的人数(即所有过来的人凑到最多人的椅子上)
k可能的最小值是:y个人将x条凳子的人数坐均衡
for(int i=0;i<n;i++){
tsum+=a[n-1]-a[i];
}
tsum是如果要坐均衡,需要多少y;
所以如果y<tsum那么 k=a[n-1] (即amax)
如果y>tsum,说明还需要均分下去:
if((y-tsum)%n==0)//完全均分
k=a[n-1]+(y-tsum)/n;
不完全均分的话就要再+1;
代码
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int mn,mx;
int n,y,a[105],tsum;
scanf("%d",&n);//凳子个数
scanf("%d",&y);//过来人数
for(int i=0;i<n;i++){
scanf("%d",&a[i]);//凳子i上的人数
}
sort(a,a+n);
for(int i=0;i<n;i++){
tsum+=a[n-1]-a[i];
}
if(y<=tsum) mn=a[n-1];
else if((y-tsum)%n==0) mn=a[n-1]+(y-tsum)/n;
else mn=a[n-1]+(y-tsum)/n+1;
mx=a[n-1]+y;
printf("%d %d\n",mn,mx);
}