PAT(Advanced)1113 Integer Set Partition C++實現

PAT(Advanced)甲級1113 Integer Set Partition C++實現

題目鏈接

1113 Integer Set Partition

題目大意

給定一個含有N個元素的序列,將其分爲兩個長度爲n1n2的序列,和分別爲S1S2,要求|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

鳴謝

PAT

最後

  • 由於博主水平有限,不免有疏漏之處,歡迎讀者隨時批評指正,以免造成不必要的誤解!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章