1. 程式人生 > >重慶賽區ACM熱身賽-8529. Cake

重慶賽區ACM熱身賽-8529. Cake

【問題描述】

小 W 和小 R 同月同日生,今天是他們的生日~

但是隻有一個生日蛋糕,切成了 n 塊(每塊是角度為 ai 的扇形)。

現在他們兩人要拿走連續的若干塊蛋糕(最終沒有蛋糕剩餘)。他們想知道怎樣分,才能使得兩人得到的扇形角度的總和之差最小。

輸出兩人獲得蛋糕總和的最小角度差。(可能出現其中一人分不到任何蛋糕的情況。)


【輸入形式】

第一行一個整數 n(1≤n≤360),表示蛋糕切成的扇形塊數

第二行 n 個整數 ai(1≤ai≤360),表示每塊扇形的角度,保證角度之和為 360 。輸入資料是一個環


【輸出形式】

輸出一個非負整數,表示小 W 與小 R 獲得蛋糕角度之差的最小值。


【樣例輸入】

3
100 160 100


【樣例輸出】

40
#include<iostream>
#include<algorithm>
using namespace std;
int a[400];
int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	
	sort(a,a+n);
	//兩邊不相等 
	int sum=0,ans=360;
	for(int i=0;i<n;i++){
		sum+=a[i];
		ans=min(ans,abs(sum-(360-sum)));
	}
	//兩邊相等 
	int t;
	int i=n-1;
	while(i>=n/2){
		t=180-a[i];
		for(int j=i-1;j>=0;j--){
			if(a[j]<=t)
				t=abs(t-a[j]);
			if(t==0){
				ans=min(ans,t);
			}
		}
		i--;
	}
	cout<<ans<<endl;
	return 0;
}