0
点赞
收藏
分享

微信扫一扫

codeforces:1543B Customising the Track

绣文字 2022-02-26 阅读 70
c++

             本题主要是要理解最小不便怎么求,我英文水平不太好,就不翻译了,说说我对这题的理解,最小不便就是(每条道路的车辆和其他道路车辆的绝对差)的和(下面的计算用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;
    }
}
举报

相关推荐

0 条评论