重慶賽區ACM熱身賽-8529. Cake
阿新 • • 發佈:2018-11-10
【問題描述】
小 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; }