PAT Advanced 1113 【Integer Set Partition】(25 )

分析:一开始没看到题目说明的所有数据都为正数,考虑了负数,其实也就多考虑n为奇数时中间的数为正还是负的问题,为正则划到更大数的集合,为负则划到更小数的集合。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1e5+10;
int seq[maxn];
int main(){
//	freopen("aa.txt", "r", stdin);
	int n, sum = 0, s1 = 0, s2;
	ios::sync_with_stdio(false); 
	cin >> n;
	for(int i = 0; i<n; i++){
		cin >> seq[i];
		sum += seq[i];
	}
	sort(seq, seq+n);
	int mid = n/2;
	for(int i = 0; i<mid; i++){
		s1 += seq[i];
	}
	s2 = n%2 ? sum-s1-seq[mid] : sum-s1;
	if(n%2){
		if(seq[mid] >= 0) s2 += seq[mid];
		else s1 += seq[mid];
	}
	cout << n%2 << " " << s2-s1;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/gq__97/article/details/82107782
今日推荐