Submission #1022428

#TimeUsernameProblemLanguageResultExecution timeMemory
1022428phoenixBootfall (IZhO17_bootfall)C++17
100 / 100
270 ms3560 KiB
#include <bits/stdc++.h> using namespace std; const int N = 550; const int A = 250250; int lim = 0; unsigned int dp[A]{1}; int sum = 0; void add(int val) { sum += val; for (int i = lim; i >= val; i--) { dp[i] += dp[i - val]; } } bool check(int sum) { if (sum < 0 && sum > lim) return 0; return (dp[sum]); } void del(int val) { sum -= val; for (int i = val; i <= lim; i++) { dp[i] -= dp[i - val]; } } int n; int a[N]; int cnt[A]; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; lim += a[i]; } for (int i = 0; i < n; i++) { add(a[i]); } if (sum & 1 || !check(sum / 2)) { cout << 0; return 0; } for (int i = 0; i < n; i++) { if (i) add(a[i - 1]); del(a[i]); for (int s = 0; s <= lim; s++) { if (check(s)) { cnt[abs(2 * s - sum)]++; } } } vector<int> res; for (int i = 1; i <= lim; i++) { if (cnt[i] == 2 * n) res.push_back(i); } cout << (int)res.size() << '\n'; for (int c : res) cout << c << ' '; }
#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...