题目
样例输入
3
7
1
6
1
样例输出
6 13
思路
暴力算就可以了。
mx显然为a_id的最大值 + y;
mn的算法则是,先用y将所有的a_i填充到a_i的最大值,如果y不足以填充所有的a_i,则最大值为a_i的最大值,
如果y足够填充a_i,那么将y剩余人数平均分配到每个板凳上,取平均分配后板凳的最大值即为mn。
时间复杂度最高的操作就是遍历a_i,寻找a_i中的最大值,时间复杂度为O(n)。
代码
#include<iostream>
using namespace std;
int main()
{
int x;//长椅数目
int y;
cin >> x;
cin >> y;
int *a = new int[x + 1];
int u = 0;
int sum = 0;
for (int i = 1; i <= x; i++)
{
cin >> a[i];
if (a[i] > u) u = a[i];
}
for (int i = 1; i <= x; i++)
sum += u - a[i];
int mx, mn;
mx = u + y;
int v = y - sum;
if (v <= 0) mn = u;
else if (v%x == 0) mn = v / x + u;
else mn = v / x + u + 1;
cout << mn << " " << mx << endl;
system("Pause");
}