# Greedy# Array# Mathematics

c067 - 00591 - Box of Bricks

🔗 前往 ZeroJudge 原題

題目描述

題目描述了小明有幾堆不同高度的積木,他希望通過搬動最少數量的積木,使得所有堆積的高度相同。輸入包含多組測試案例,每組案例包含堆數和每堆的高度。輸出每組案例需要搬動的最小積木數量。

解題思路

解題思路是首先計算所有積木高度的平均值。然後,計算每堆積木與平均值之間的差的絕對值,並將這些差的絕對值加總。最後,將加總結果除以 2,即可得到最小搬動次數。這是因為每次搬動可以將一個積木從高處移到低處,或者從低處移到高處,所以總的搬動次數是差的絕對值之和的一半。

複雜度分析

  • 時間複雜度: O(n)
  • 空間複雜度: O(n)

程式碼

#include <iostream>

using namespace std;

int main(){
	int a=0,b=0,c=1,sum=0;
	while(cin >> a){
	if(a>0){
		int d[a];
		for(int i=0;i<a;i++){
			cin >> d[i];
			b+=d[i];
		}
		b/=a;
		for(int i=0;i<a;i++){
			if(d[i]-b<0){
				sum+=(d[i]-b)*(-1);
			}
			else{
				sum+=(d[i]-b);
			}
		}
		cout << "Set #" << c << endl;
		cout << "The minimum number of moves is " << sum/2 << "." << endl;
		cout << endl;
		sum=0;
		a=0;
		b=0;
		c++;
	}
	}
	
}

Discussion