Submission #334665

#TimeUsernameProblemLanguageResultExecution timeMemory
334665limabeansBootfall (IZhO17_bootfall)C++17
100 / 100
359 ms3796 KiB
#include <bits/stdc++.h>
using namespace std;

template<typename T>
void out(T x) { cout << x << endl; exit(0); }
#define watch(x) cout << (#x) << " is " << (x) << endl





using ll = long long;


const int maxn = 555;



ll sum = 0;
ll dp[maxn*maxn];



void add(ll x) {
    for (int i=sum; i>=0; i--) {
	dp[i+x] += dp[i];
    }
    sum += x;
}


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

bool fail[maxn*maxn];

int n;
ll a[maxn];


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


    dp[0]=1;

    cin>>n;
    for (int i=0; i<n; i++) {
	cin>>a[i];
	add(a[i]);
    }


    if (sum%2) out(0);
    if (dp[sum/2]==0) out(0);


    for (int i=0; i<n; i++) {
	sub(a[i]);
	for (int x=1; x<=500*500; x++) {
	    if ((sum+x)%2==1) {
		fail[x]=true;
	    }
	    if ((sum+x)%2==0 && dp[(sum+x)/2]==0) {
		fail[x]=true;
	    }
	}
	add(a[i]);
    }


    vector<int> ans;
    for (int i=1; i<=500*500; i++) {
	if (!fail[i]) ans.push_back(i);
    }


    cout<<ans.size()<<"\n";
    for (int x: ans) cout<<x<<" ";
    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...