제출 #438163

#제출 시각아이디문제언어결과실행 시간메모리
438163lulwpopBootfall (IZhO17_bootfall)C++14
13 / 100
1087 ms2364 KiB
#include <bits/stdc++.h>
#define all(X) X.begin(), X.end()
#define sz(x) (int)x.size()
#define fr first
#define sc second
#define endl '\n'
 
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
 
const int maxn = 1e6 + 10;
const int maxa = 1e6;
const int inf = 2e9;
const ll INF = 1e18;
const ll mod = 1e9 + 7;
const int block = 350;
 
int main () 
{
	ios_base::sync_with_stdio(0); cin.tie();
/*#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif*/
	int n; cin >> n;
	vector <int> a (n);
	int mx = 0;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
		mx = max(mx, a[i]);
	}
	bitset <25100> st;
	int sum = 0;
	st[0] = 1;
	for (int i = 0; i < n; i++) {
		st |= (st << a[i]);
		sum += a[i];
	}
	if ((sum & 1)) {
		cout << 0;
		return 0;
	} else if (!st[sum >> 1]) {
		cout << 0;
		return 0;
	}
 
	vector <bitset <500*500+1>> t (n);
	for (int sk = 0; sk < n; sk++) {
		t[sk][0] = 1;
		for (int j = 0; j < n; j++) {
			if (j != sk) {
				t[sk] |= (t[sk] << a[j]);
			}
		}
	}
	vector <int> ans;
	for (int i = 1; i <= n * mx; i++) {
		sum += i;
		bool ok = true;
		for (int j = 0; j < n; j++) {
			bitset <500*500+1> tt = t[j];
			tt |= (tt << i);
			sum -= a[j];
			if ((sum & 1)) {
				ok = false;
				sum += a[j];
				break;
			} else if (!tt[sum >> 1]) {
				ok = false;
				sum += a[j];
				break;
			} else {
				sum += a[j];
			}
		}
		sum -= i;
		if (ok) ans.push_back(i);
	}
	cout << sz(ans) << endl;
	for (auto i : ans) {
		cout << i << " ";
	}
	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...