Submission #930924

#TimeUsernameProblemLanguageResultExecution timeMemory
930924OAleksaBootfall (IZhO17_bootfall)C++14
65 / 100
1048 ms13784 KiB
#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
const int N = 510;
const int A = 510;
bitset<250069> bt[N], sv;
int n, a[N];
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int tt = 1;
  //cin >> tt;
  while (tt--) {
  	cin >> n;
  	sv[0] = 1;
  	for (int i = 1;i <= n;i++)
  		cin >> a[i], sv |= (sv << a[i]);
  	int s = accumulate(a + 1, a + n + 1, 0);
  	if (s % 2 == 1 || sv[s / 2] == 0) {
  		cout << '0';
  		return 0;
  	}
  	s /= 2;
  	for (int j = 1;j <= n;j++) {
  		bitset<250069> t;
  		t[0] = 1;
  		for (int i = 1;i <= n;i++) {
  			if (i == j)
  				continue;
  			t |= (t << a[i]);
  		}
  		bt[j] = t;
  	}
  	vector<int> ans;
  	for (int i = (a[1] % 2 == 1 ? 1 : 2);i < N * A;i += 2) {
  		int ok = 1;
  		for (int j = 1;j <= n;j++) {
  			int r = i - a[j];
  			if (r & 1) {
  				ok = 0;
  				break;
  			}
  			r /= 2;
  			int x = s + r;
  			if (bt[j][x] == 0) {
  				ok = 0;
  				break;
  			}
  		}
  		if (ok)
  			ans.push_back(i);
  	}
  	cout << ans.size() << '\n';
  	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...