PAT(Advanced)甲級1113 Integer Set Partition C++實現
題目鏈接
題目大意
給定一個含有N
個元素的序列,將其分爲兩個長度爲n1
和n2
的序列,和分別爲S1
和S2
,要求|n1 - n2|
最小,|S1-S2|
最大,輸出最小|n1 - n2|
和最大|S1-S2|
算法思路
根據題意,排序後,將前N / 2
個元素減去N - (N / 2)
個元素的和即可
AC代碼
/*
author : eclipse
email : [email protected]
time : Mon Jun 29 18:46:14 2020
*/
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[]) {
int N;
scanf("%d", &N);
vector<int> sequence;
sequence.resize(N);
for (int i = 0; i < N; i++) {
scanf("%d", &sequence[i]);
}
int sum1 = 0, sum2 = 0;
int n1 = N / 2;
int n2 = N - n1;
sort(sequence.begin(), sequence.end());
for (int i = 0; i < sequence.size(); i++) {
(i < n1 ? sum1 : sum2) += sequence[i];
}
printf("%d %d", abs(n1 - n2), abs(sum1 - sum2));
return 0;
}
樣例輸入1
10
23 8 10 99 46 2333 46 1 666 555
樣例輸出1
0 3611
樣例輸入2
13
110 79 218 69 3721 100 29 135 2 6 13 5188 85
樣例輸出2
1 9359
鳴謝
最後
- 由於博主水平有限,不免有疏漏之處,歡迎讀者隨時批評指正,以免造成不必要的誤解!