重庆赛区ACM热身赛-8529. Cake

版权声明:本人菜鸟一只,如文章有错误或您有高见,请不吝赐教 https://blog.csdn.net/qq_41138935/article/details/83870831

【问题描述】

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

但是只有一个生日蛋糕,切成了 n 块(每块是角度为 ai 的扇形)。

现在他们两人要拿走连续的若干块蛋糕(最终没有蛋糕剩余)。他们想知道怎样分,才能使得两人得到的扇形角度的总和之差最小。

输出两人获得蛋糕总和的最小角度差。(可能出现其中一人分不到任何蛋糕的情况。)


【输入形式】

第一行一个整数 n(1≤n≤360),表示蛋糕切成的扇形块数

第二行 n 个整数 ai(1≤ai≤360),表示每块扇形的角度,保证角度之和为 360 。输入数据是一个环


【输出形式】

输出一个非负整数,表示小 W 与小 R 获得蛋糕角度之差的最小值。


【样例输入】

扫描二维码关注公众号,回复: 4003432 查看本文章
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;
}

猜你喜欢

转载自blog.csdn.net/qq_41138935/article/details/83870831