本题主要是要理解最小不便怎么求,我英文水平不太好,就不翻译了,说说我对这题的理解,最小不便就是(每条道路的车辆和其他道路车辆的绝对差)的和(下面的计算用s代替),既然是差的话,我就是想怎么把他降到最小,那就是平均值了,把每条道路的车辆都相加,再除以道路条数就是平均值,这样就变成了每条道路的车辆都相同了,当然会有余数,下面就处理余数。
要最小就把这个余数分成若干1,分别加到每条道路中(因为时除余道路,所以这个余数一定小于道路数(道路数下面计算用n代替)),这样就变成了有些道路是平均值,有些是平均值加1,,平均值加1的道路条数可以用 s%n ,然后就是车辆时平均数的道路可以是 n-s%n。
所以每一条平均值加1的道路的不便就是 n-s%n,一共有s%n条,所以不便和为 (s%n)*(n-s%n)。
下面附上AC代码,写的不好还请多见谅:
#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
int t,i,n;
ll s,c,a;//s计算所以的车辆,c计算移动次数,会超过int型
cin>>t;
while(t--){
cin>>n;
s=0;//车辆每次初始为0
for(i=0;i<n;i++){
cin>>a;//每条路的车辆数
s+=a;
}
c=(s%n)*(n-s%n);//计算最小不便
cout<<c<<endl;
}
}