Submission #1130662

#TimeUsernameProblemLanguageResultExecution timeMemory
1130662zhasynBootfall (IZhO17_bootfall)C++20
65 / 100
1095 ms1204 KiB
#include <bits/stdc++.h>
#define pb push_back
#define pf push_front
using namespace std;
#define F first
#define S second
typedef long long ll;
#define pii pair <int, int>
#define pll pair <ll, ll>
typedef long double ld;
const ll N = 250000 + 100, M = 4096 + 10, len = 315, inf = 1e18;
const ll mod = 1e9 + 7;
ll um(ll a, ll b){
	return (1LL * a * b) % mod;
}
ll subr(ll a, ll b){
	return ((1LL * a - b) % mod + mod) % mod;
}
int arr[N];
int main() {
	int n, sm = 0;
	cin >> n;
	bool c1 = false, c2 = false;
	for(int i = 1; i <= n; i++){
		cin >> arr[i];
		sm += arr[i];
		
		if(arr[i] % 2 == 1) c1 = true;
		else c2 = true;
	}
	bitset <250100> cur;
	cur[0] = 1;
	for(int i = 1; i <= n; i++){
		cur |= (cur << arr[i]);
	}
	if(sm % 2 == 1 || cur[sm/2] == 0 || c1 + c2 == 2){
		cout << 0;
		return 0;
	}
	
	
	bitset <250100> ans;
	for(int i = 1; i <= n; i++){
		bitset <250100> b;
		b[0] = 1;
		for(int j = 1; j <= n; j++){
			if(i == j) continue;
			b |= (b << arr[j]);
		}
		if(i == 1) ans = (b >> ((sm - arr[i])/2));
		else ans &= (b >> ((sm - arr[i])/2));
	}
	vector <int> vec;
	for(int i = 1; i <= sm; i++){
		if(ans[i]){
			if(c1) vec.pb(i * 2 - 1);
			else vec.pb(i * 2);
		}
	}
	
	cout << (int)vec.size() << endl;
	for(auto u : vec){
		cout << u << " ";
	}
  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...