您的位置:首页 > 其它

HDU 1326

2016-01-28 23:18 260 查看
题意:给出一堆高度不一的砖头,现在使他们高度一样,问最少的移动次数,(每减少1就是移动一次)

思路:求出平均高度,然后模拟最后平均高度的数组,也就是说,每个数组对应每一个平均高度,也就是说比平均高度大的那些数据,就移动了,就这样直接求和

#include<iostream>
#include<algorithm>
using namespace std;
int num[150];
int main()
{
int n,t=1;
while(cin >> n &&n)
{
int tot=0;
for(int i=0;i<n;++i){
cin >> num[i];
tot+=num[i];
}
int ave=tot/n;
int tar[150];
fill(tar,tar+n,ave);
int sn=tot%n;
for(int i=n-1;i>=0&&sn;--i){
num[i++];sn--;
}
int mmin=0;
for(int i=0;i<n;++i)
if(tar[i]<num[i])    mmin+=num[i]-tar[i];
cout << "Set #" << t++ << endl;
cout << "The minimum number of moves is " << mmin << "." << endl;
cout << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: