Submission #334028

#TimeUsernameProblemLanguageResultExecution timeMemory
334028BY_KUTBILIMBootfall (IZhO17_bootfall)C++14
100 / 100
406 ms3564 KiB
/** @BY_KUTBILIM **/
#include <bits/stdc++.h>
using namespace std;

#define ff first
#define ss second
#define pb push_back
#define ll long long

const int N = 510;
int sum = 0;
int dp[N*N], cant[N*N];
void add(int x){
    for(int i = sum; i >= 0; i--){
        dp[i+x] += dp[i];
    }
    sum += x;
}

void sub(int x){
    sum -= x;
    for(int i = 0; i <= sum; i++){
        dp[i+x] -= dp[i];
    }
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie();

    int n;
    cin >> n;
    int a[n];
    dp[0] = 1;
    for(int i = 0; i < n; i++){
        cin >> a[i];
        add(a[i]);
    }
    if(sum % 2 != 0 || !dp[sum/2]){
        cout << 0;
        return 0;
    }
    for(int i = 0; i < n; i++){
        sub(a[i]);
        for(int j = 1; j <= 250000; j++){
            if((sum + j) % 2 != 0 || !dp[(sum+j)/2])cant[j] = 1;
        }
        add(a[i]);
    }
    vector<int> ans;
    for(int i = 1; i <= 250000; i++){
        if(!cant[i])ans.pb(i);
    }
    cout << ans.size() << endl;
    for(auto i : ans){
        cout << i << " ";
    }
    cout << endl;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...