题意:
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
思路:
k最大时,每个新来的人全部坐到原本人数最多的长椅上,直接输出 mx + y 即可。
k最小时,若是新来的人加上原来的坐着的人无法得到平均值,即 sum+y<=mx*x,直接输出mx即可;反之,若是可以平摊到每把长椅,则输出平均值(sum+y)/x或(sum+y)/x+1
代码:
#include <iostream>
#include <algorithm>
using namespace std;
int a[105];
int main()
{
int x, y;//x - 长椅数量 y - 新人数量
int sum = 0;
int mx = 0;
cin >> x >> y;
for (int i = 0; i < x; i++) {
cin >> a[i];
sum = sum + a[i];
mx = max(mx, a[i]);
}
if (sum + y <= mx*x) {
cout << mx << " ";
}
else {
if ((sum + y) % x == 0) {
cout << (sum + y) / x << " ";
}
else {
cout << (sum + y) / x + 1 << " ";
}
}
cout << mx + y;
}