PTA整数セットパーティション(25)

無限の光を放つのは人間の心であり、無限の闇を生み出すのも人間の心であり、光と闇が絡み合って戦うこの世界は、懐かしくて無力な世界です。

N(> 1)の正の整数のセットが与えられた場合、それらをそれぞれn 1とn 2の2つの互いに素なセットA 1とA 2に分割することになっています。S 1とS 2が、それぞれA 1とA 2のすべての数値の合計を表すとします。最初に∣n 1 −n 2 ∣が最小化され、次に∣S 1 −S 2 ∣が最大化されるようにパーティションを作成することになっています。

入力仕様:

各入力ファイルには1つのテストケースが含まれています。いずれの場合も、最初の行は整数N(2≤N≤105)を示し、次の行ではN個の正の整数がスペースで区切られて続きます。すべての整数とその合計が2 31未満であることが保証されています。

出力仕様:

それぞれのケースについて、twon 1 −n 2 ∣と∣S 1 −S 2 ∣の2つの数字を1つのスペースで区切って1行に印刷します。

入力例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
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX

//#include<bits/stdc++.h>
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
#define PI 3.1415926
typedef long long ll;
using namespace std;
int const mod=1e9+7;
const int maxn=1e5+10;
int n, jg, ct;

int main() {
    scanf("%d", &n);
    vector<int> v(n);
    for(int i=0; i<n; i++) {
        scanf("%d", &v[i]);
        jg+=v[i];
    }
    sort(v.begin(), v.end());
    for(int i=0; i<n/2; i++)
        ct+=v[i];
    printf("%d %d", n%2, jg-2*ct);
    return 0;
}

 

おすすめ

転載: blog.csdn.net/weixin_44170305/article/details/108445988