Week9:长凳

题目描述
滨海公园有 x 条长凳。第 i 个长凳上坐着 a_i 个人。这时候又有 y 个人将来到公园,他们将选择坐在某些公园中的长凳上,那么当这 y 个人坐下后,记k = 所有椅子上的人数的最大值,那么k可能的最大值mx和最小值mn分别是多少?

输入格式
第一行包含一个整数 x (1 <= x <= 100) 表示公园中长椅的数目
第二行包含一个整数 y (1 <= y <= 1000) 表示有 y 个人来到公园
接下来 x 个整数 a_i (1<=a_i<=100),表示初始时公园长椅上坐着的人数

输出格式
输出 mn 和 mx

输入样例

3
7
1
6
1

输出样例

6 13

样例解释
最初三张椅子的人数分别为 1 6 1
接下来来了7个人。
可能出现的情况为{1 6 8},{1,7,7},…,{8,6,1}
相对应的k分别为8,7,…,8
其中,状态{1,13,1}的k = 13,为mx
状态{4,6,5}和状态{5,6,4}的k = 6,为mn

解题思路
对于最大值:找出初始状态时人数最多的那个凳子,然后之后的每个人全都坐在这个凳子上就是最多的。
对于最小值:对于每次来的新人,让他坐到当前人数最少的那个凳子上,然后最后找出所有凳子里人数最多的那个即可。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int>seat;

void ssort()
{
	sort(seat.begin(), seat.end());
}

int main()
{
	int x, y;
	cin >> x >> y;
	for (int i = 0, a; i < x; i++)
	{
		cin >> a;
		seat.push_back(a);
	}

	int mx, mn;

	ssort();

	mx = y + seat.back();

	for (int i = 0; i < y; i++)
	{
		seat.front()++;
		ssort();
	}

	mn = seat.back();

	cout << mn << ' ' << mx << endl;

}
原创文章 52 获赞 7 访问量 1677

猜你喜欢

转载自blog.csdn.net/qq_44506233/article/details/105931080