zoukankan      html  css  js  c++  java
  • 1113 Integer Set Partition (25 分)

    Given a set of N (>) positive integers, you are supposed to partition them into two disjoint sets A1​​ and A2​​ of n1​​ and n2​​ numbers, respectively. Let S1​​ and S2​​ denote the sums of all the numbers in A1​​ and A2​​, respectively. You are supposed to make the partition so that ∣ is minimized first, and then ∣ is maximized.

    Input Specification:

    Each input file contains one test case. For each case, the first line gives an integer N (2), and then N positive integers follow in the next line, separated by spaces. It is guaranteed that all the integers and their sum are less than 231​​.

    Output Specification:

    For each case, print in a line two numbers: ∣ and ∣, separated by exactly one space.

    Sample Input 1:

    10
    23 8 10 99 46 2333 46 1 666 555
     

    Sample Output 1:

    0 3611
     

    Sample Input 2:

    13
    110 79 218 69 3721 100 29 135 2 6 13 5188 85
     

    Sample Output 2:

    1 9359
     
     
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1010;
    struct node{
        int n,s;
    };
    map<int,node> mp;
    vector<int> v;
    int getSumL(int index){
        int sum=0;
        for(int i=0;i<=index;i++){
            sum+=v[i];
        }
        return sum;
    }
    int getSumR(int index){
        int sum=0;
        for(int i=index;i<v.size();i++){
            sum+=v[i];
        }
        return sum;
    }
    
    int main(){
        int n;
        cin>>n;
        v.resize(n);
        for(int i=0;i<n;i++){
            cin>>v[i];
        }
        sort(v.begin(),v.end());
        int cnt;
        int sum1=0,sum2=0;
        if(n%2==0){
            cnt=0;
            for(int i=0;i<v.size();i++){
                if(i<n/2){
                    sum1+=v[i];
                }
                else{
                    sum2+=v[i];
                }
            }
        }
        else{
            cnt=1;
            for(int i=0;i<v.size();i++){
                if(i<n/2){
                    sum1+=v[i];
                }
                else{
                    sum2+=v[i];
                }
            }
        }
        cout<<cnt<<" "<<abs(sum1-sum2)<<endl;
        return 0;
    }

    一道水题,却被我想的复杂,真是无语

  • 相关阅读:
    BZOJ3193: [JLOI2013]地形生成
    ARG102E:Stop. Otherwise...
    51NOD1847:奇怪的数学题
    大型大常数多项式模板(已卡常...)
    CF932G Palindrome Partition
    51nod1538:一道难题(常系数线性递推/Cayley-Hamilton定理)
    HTML——meta标签
    HTTP 格式
    Node.js——Async
    设计模式——外观模式
  • 原文地址:https://www.cnblogs.com/dreamzj/p/14461181.html
Copyright © 2011-2022 走看看