UVa 591 Box of Bricks

📅 2026/6/25 23:13:33
UVa 591 Box of Bricks
题目描述题目要求将nnn堆砖块调整为相同高度每次只能移动一块砖移动定义为将一块砖从一堆移到另一堆且移动次数等于所有高出平均值的砖块数量之和。计算最小移动次数。输入格式输入包含多个数据集。每个数据集第一行是一个整数nnn1≤n≤501 \le n \le 501≤n≤50第二行是nnn个整数hih_ihi​1≤hi≤1001 \le h_i \le 1001≤hi​≤100。总砖数能被nnn整除。输入以n0n 0n0结束。输出格式对于每个数据集输出Set #X然后输出The minimum number of moves is k.每个数据集后跟一个空行。样例输入6 5 2 4 1 7 5 0输出Set #1 The minimum number of moves is 5.题目分析本题的核心是计算需要移动的砖块数量。设平均高度为avgavgavg则所有高于avgavgavg的堆中多余砖块的总数即为最小移动次数。算法计算总和除以nnn得到平均高度。遍历所有堆累加高出平均值的砖块数量或低于平均值的短缺数量两者相等。复杂度分析O(n)O(n)O(n)。代码实现// Box of Bricks// UVa ID: 591// Verdict: Accepted// Submission Date: 2016-08-06// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;intmain(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);intn,cases0;while(cinn,n){vectorintbricks(n);inttotal0;for(inti0;in;i){cinbricks[i];totalbricks[i];}intheighttotal/n;total0;for(inti0;in;i)if(bricks[i]height)total(height-bricks[i]);coutSet #cases\n;coutThe minimum number of moves is total.\n\n;}return0;}