제출 #1103509

#제출 시각아이디문제언어결과실행 시간메모리
1103509stdfloatBootfall (IZhO17_bootfall)C++17
0 / 100
1 ms336 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

#define all(v)	(v).begin(), (v).end()

int main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);

	int n;
	cin >> n;

	vector<int> a(n);
	for (auto &i : a)
		cin >> i;

	int sm = accumulate(all(a), 0);

	vector<int> dp(sm + 1); dp[0] = 1;
	for (auto i : a) {
		for (int j = sm; j >= i; j--)
			dp[j] += dp[j - i];
	}

	if (sm & 1 || !dp[sm >> 1]) return cout << 0, 0;

	vector<int> ans(sm + 1);
	for (auto i : a) {
		for (int j = i; j <= sm; j++)
			dp[j] -= dp[j - i];

		for (int j = 1; j <= sm >> 1 && (sm - i + j) >> 1 <= sm; j++)
			if (!((sm - i + j) & 1) && dp[(sm - i + j) >> 1]) ans[j]++;

		for (int j = sm; j >= i; j--)
			dp[j] += dp[j - i];
	}

	cout << count(all(ans), n) << '\n';
	for (int i = 1; i <= sm; i++)
		if (ans[i] == n) cout << 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...