题意
SDUQD 旁边的滨海公园有 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
思路
这是思考题,显然mx就是ai中的最大值+y, 对于最小值,y个人过来后则mn>=原ai中的max,所以分配的时候尽可能的让每一组<=原ai中的max,如果还剩余人,则均摊即可。
总结
题目中在思考怎么保证mn和mx
代码
#include<iostream>
#include<algorithm>
using namespace std;
int a[120];
int main()
{
int x,y;cin>>x>>y;
for(int i=0;i<x;i++)
cin>>a[i];
sort(a,a+x);int tt=y;bool flag=0;
for(int i=0;i<=x-2;i++)
{
int t=a[x-1]-a[i];
if(y<=t)
{
cout<<a[x-1]<<" ";flag=1;break;
}
else
{
y=y-t;
}
}
if(!flag)
{
if(y%x==0)
cout<<a[x-1]+y/x<<" ";
else cout<<a[x-1]+y/x+1<<" ";
}
cout<<a[x-1]+tt;
return 0;
}