题目
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
Input Example
3
7
1
6
1
Output Example
6 13
思路:
对最初椅子上的人数进行排序。
mx值即为当前人数最多的椅子的人数+新来的人数。
mn值:求出当所有椅子上坐的人为最大椅子上的人时需要再来多少个,如果来的人比这个数少,那么mn就是当前最大人数的椅子;如果来的人比这个数多,那么坐满了之后再把剩下的人平分到每个椅子。
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int a[110];
int x,y,sum=0;
cin>>x>>y;
for(int i=0;i<x;i++)
cin>>a[i];
sort(a,a+x);
for(int i=0;i<x;i++)
sum+=a[x-1]-a[i];
if(y<=sum)
cout<<a[x-1]<<" "<<a[x-1]+y<<endl;
else{
int m=(y-sum)%x==0?(y-sum)/x:(y-sum)/x+1;
cout<<a[x-1]+m<<" "<<a[x-1]+y<<endl;
}
return 0;
}