Submission #173518

#TimeUsernameProblemLanguageResultExecution timeMemory
173518AllMightBootfall (IZhO17_bootfall)C++14
100 / 100
468 ms4080 KiB
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

const int N = 502;

int n;
int a[N];

int knp[N * N];
int cnt[N * N];
vector <int> v;

void check(int ind, int sum)
{
	for (int i = a[ind]; i <= sum; i++)
		knp[i] -= knp[i - a[ind]];

	sum -= a[ind];
	for (int i = 0; 2 * i < sum; i++) {
		if (!knp[i])	continue;
		int ans = sum - 2 * i;
		cnt[ans]++;
		if (ind == 0)
			v.push_back(ans);
	}

	for (int i = sum; i >= 0; i--)
		knp[i + a[ind]] += knp[i];
}

int main()
{
	ios_base::sync_with_stdio(false);

	cin >> n;

	int mx = 0;
	knp[0] = 1;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
		for (int j = mx; j >= 0; j--) {
			if (knp[j]) {
				knp[j + a[i]] += knp[j];
				mx = max(mx, j + a[i]);
			}
		}
	}
	int sum = mx;
	if (sum % 2 || !knp[sum / 2]) {
		cout << "0\n";
		return 0;
	}

	for (int i = 0; i < n; i++)
		check(i, sum);

	vector <int> ans;
	for (int i = 0; i < v.size(); i++)
		if (cnt[v[i]] == n)
			ans.push_back(v[i]);

	sort(ans.begin(), ans.end());
	cout << ans.size() << endl;
	for (int i = 0; i < ans.size(); i++)
		cout << ans[i] << ' ';
	cout << endl;

	return 0;
}

Compilation message (stderr)

bootfall.cpp: In function 'int main()':
bootfall.cpp:61:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < v.size(); i++)
                  ~~^~~~~~~~~~
bootfall.cpp:67:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < ans.size(); i++)
                  ~~^~~~~~~~~~~~
#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...