Submission #333662

#TimeUsernameProblemLanguageResultExecution timeMemory
333662tengiz05Bootfall (IZhO17_bootfall)C++17
100 / 100
396 ms5864 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define FASTIO ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define pii pair<int, int>
#define ff first
#define ss second
#define PI acos(-1)
#define ld long double
const int mod = 1e9+7, N = 505;
int msb(int val){return sizeof(int)*8-__builtin_clzll(val);}
int a[N], n, m, k;
int dp[N*N], can[N*N];
int sum;
void add(int v){
	for(int i=sum;i>=0;i--)dp[i+v] += dp[i];
	sum += v;
}
void del(int v){
	sum -= v;
	for(int i=0;i<=sum;i++)dp[i+v] -= dp[i];
}
void solve(int test_case){
	int i, j;
	dp[0] = 1;
	cin >> n;
	for(i=0;i<n;i++){
		cin >> a[i];
		add(a[i]);
	}
	if(sum%2!=0 || !dp[sum/2]){
		cout << 0 << '\n';
		return;
	}
	
	for(i=0;i<n;i++){
		del(a[i]);
		for(j=1;j<=250000;j++){
			if((sum+j)%2 || !dp[(sum+j)/2])can[j] = 1;
		}add(a[i]);
	}
	vector<int> ans;
	for(i=1;i<=250000;i++)if(!can[i])ans.pb(i);
	cout << ans.size() << '\n';
	for(auto x : ans)cout <<x<< ' ';
	cout << '\n';
	return;
}

signed main(){
	FASTIO;
#define MULTITEST 0
#if MULTITEST
	int ___T;
	cin >> ___T;
	for(int T_CASE = 1; T_CASE <= ___T; T_CASE++)
		solve(T_CASE);
#else
	solve(1);
#endif
	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...