题意:
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
思路:
这道题不难,思考之后就可以知道,可能的最大值就是后面来的所有人都坐在之前人数最多的椅子上。而要求最小值,可知最小值最少是之前的最大值,我们进行填平操作,即先将椅子上的人数都填平为之前的最大值,若是填不平那么最小值就是之前的最大值,若是还超出,则均匀分配到每个椅子上即可。
代码:
#include<iostream>
using namespace std;
int main()
{
int a[105];
int x;
int y;
cin >> x >> y;
int max = -1;
for (int i = 1; i <= x; i++)
{
cin >> a[i];
if (max < a[i])max = a[i];
}
int mx = y + max;
int mn;
int keng = 0;
for (int i = 1; i <= x; i++)
{
keng += (max - a[i]);
}
if (keng >= y)mn = max;
else
{
mn = max + (y - keng) / x;
if ((y - keng) % x != 0)mn++;
}
cout << mn <<" "<< mx;
}