题目
SDUQD 旁边的滨海公园有 x 条长凳。第 i 个长凳上坐着 a_i 个人。这时候又有 y 个人将来到公园,他们将选择坐在某些公园中的长凳上,那么当这 y 个人坐下后,记k = 所有椅子上的人数的最大值,那么k可能的最大值mx和最小值mn分别是多少。
输入输出
Input
第一行包含一个整数 x (1 <= x <= 100) 表示公园中长椅的数目
第二行包含一个整数 y (1 <= y <= 1000) 表示有 y 个人来到公园
接下来 x 个整数 a_i (1<=a_i<=100),表示初始时公园长椅上坐着的人数
Output
输出 mn 和 mx
Sample Input
3
7
1
6
1
Sample Output
6 13
思路分析
k的最大值是当前人数最多的椅子的人数加新来的人数;
k的最小值:首先找到人数最多的椅子对应的人数,求出总共还需要多少人使得其他椅子的人数都达到这个最多的人数,如果新来的人数小于这个总和,那么最小值就是当前人数最多的椅子的人数;否则,用新来的人数减这个总和,然后平分给各个椅子,最小值就是新来的人数减这个总和除椅子数再加一。
AC代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int x,y,mn,mx,sum=0;
int a[105];
int main()
{
scanf("%d",&x);
scanf("%d",&y);
for(int i=0;i<x;i++)
scanf("%d",&a[i]);
sort(a,a+x);
mx=a[x-1]+y;
for(int i=0;i<x;i++)
{
sum+=a[x-1]-a[i];
}
if(sum>=y){
mn=a[x-1];
}
else{
if((y-sum)%x==0)
mn=a[x-1]+(y-sum)/x;
else{
mn=a[x-1]+(y-sum)/x+1;//不够再均分一次但加一次
}
}
printf("%d %d",mn,mx);
return 0;
}