问题描述
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 Example
3
7
1
6
1
Output Example
6 13
思路
直接求原先+现在人数总和的平均数(向上取整),如果大于原先最大值,则mn为该平均数,否则为原先的最大值。
一定要注意是向上取整!!!!
代码
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iomanip>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define mem(a,s) memset(a,s,sizeof(a))
int maxn,sum;
int main(){
// freopen("in.txt","r",stdin);
int x,y,z;
cin>>x>>y;
rep(i,1,x){
cin >> z;
if(z>maxn)
maxn = z;
sum += z;
}
sum = (sum - 1 + y) / x + 1;
cout << (sum > maxn ? sum : maxn)<<' '<<maxn + y;
return 0;
}