题目描述:给出n个a[i],表示目前每个长椅上坐着的人数,又给出m个人,要安排他们坐在n个长椅上,记录坐着人最多的长椅上的人数k,求最大的k和最小的k
题目链接:http://codeforces.com/contest/1042/problem/A
思路:先选出最大的a[i]—maxa,最大k很好求,就是maxa+m,而最小k呢?用maxa去减每一个数求和出suma,如果m<suma,最小值就是maxa,如果m>suma,就在这个基础上加上[(m-suma)/n]向上取整。
c++代码:
#include <iostream>
#include <cmath>
using namespace std;
int a[55];
int main() {
int n,m;
cin >> n;
cin >> m;
int maxt=0;
for(int i=0;i<n;i++)
{
int t;
cin >> t;
a[i]=t;
maxt=max(t,maxt);
}
//cout << mint <<endl;
//int ans1=max(mint+(m%n==0?m/n:m/n+1),maxt+m/n) ;
int sum=0;
for(int i=0;i<n;i++) {
sum+=maxt-a[i];
}
int ans1;
if(m<=sum)ans1=maxt;
else ans1=maxt+((m-sum)%n==0?(m-sum)/n:(m-sum)/n+1);
int ans2=maxt+=m;
cout << ans1 <<" " << ans2 << endl;
return 0;
}