1、题目很简单,就是满足所有分组要在L和R的区间中
2、把所有的人数加起来,如果小于L x n 或者 大于R x n,明显不可以在区间内。排除这两种可能剩下的就是可以的了。
3、剩下的我们只需要考虑,如果人数小于L,要补充多少到达L,如果人数大于R,要减少多少到达R。很明显我们先用多出来的人数去补充缺少的人数,再考虑用区间内的人数去补充缺失的人数或者把多的人数补充到区间内去。仔细想一下交换次数就是max(缺少的人数,多余的人数)。
#include<iostream>
using namespace std;
int main()
{
int n,num[55];
int l,r;
cin>>n;
for(int i=0;i<n;i++)
cin>>num[i];
cin>>l>>r;
int a=0,b=0,sum=0;
for(int i=0;i<n;i++)
{
sum+=num[i];
if(num[i]<l)
a += l-num[i];
else if(num[i]>r)
b += num[i]-r;
}
if(sum<l*n||sum>r*n)
cout<<"-1";
else
cout<<(a>b? a:b);
return 0;
}