/* Author: goats_9 */
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr int N = 500 * 250 + 1;
constexpr int M = 500 * 500 + 1;
int main() {
cin.tie(0)->sync_with_stdio(false);
int n;
cin >> n;
vector<int> a(n);
for (auto &u : a)
cin >> u;
int tot = accumulate(a.begin(), a.end(), 0);
auto get = [&] (int ban) {
bitset<N> ret;
ret[0] = 1;
for (int i = 0; i < n; i++) {
if (i == ban) continue;
ret |= ret << a[i];
}
return ret;
};
auto ini = get(-1);
if (tot % 2 || !ini[tot / 2]) {
return cout << "0", 0;
}
bitset<M> df;
for (int i = 0; i < N; i++)
df[i] = 1;
for (int i = 0; i < n; i++) {
auto bst = get(i);
bitset<M> ndf;
for (int j = 0; 2 * j < tot - a[i]; j++) {
if (bst[j]) ndf[tot - a[i] - 2 * j] = 1;
}
df &= ndf;
}
cout << df.count() << '\n';
for (int i = 1; i < M; i++)
if (df[i]) cout << i << ' ';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |