Submission #884472

#TimeUsernameProblemLanguageResultExecution timeMemory
884472tsumondaiBootfall (IZhO17_bootfall)C++14
100 / 100
229 ms3820 KiB
// DNC DP #include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define mp make_pair #define foru(i, l, r) for(int i = l; i <= r; i++) #define ford(i, r, l) for(int i = r; i >= l; i--) #define __TIME (1.0 * clock() / CLOCKS_PER_SEC) typedef pair<int, int> ii; typedef pair<ii, int> iii; typedef pair<ii, ii> iiii; const int N = 1e6 + 5; const int oo = 1e9, mod = 1e9 + 7; int n, m, k, a[N]; int dp[500 * 500 + 5], cnt[500 * 500 + 5]; vector<int> res; void process() { cin >> n; int sum = 0; foru(i, 1, n) { cin >> a[i]; sum += a[i]; } dp[0] = 1; foru(i, 1, n) { ford(j, sum - a[i], 0) { dp[j + a[i]] += dp[j]; } } if ((sum & 1) || !dp[(sum >> 1)]) { cout << 0 << '\n'; return; } foru(i, 1, n) { int x = sum - a[i]; foru(j, 0, sum - a[i]) { dp[j + a[i]] -= dp[j]; } foru(j, (x + 1) >> 1, x) { cnt[(j << 1) - x] += !!dp[j]; } ford(j, sum - a[i], 0) { dp[j + a[i]] += dp[j]; } } foru(i, 0, sum) if (cnt[i] == n) res.pb(i); cout << res.size() << '\n'; for (auto x : res) cout << x << ' '; return; } signed main() { cin.tie(0)->sync_with_stdio(false); //freopen(".inp", "r", stdin); //freopen(".out", "w", stdout); process(); cerr << "Time elapsed: " << __TIME << " s.\n"; return 0; } // dont stop
#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...