Submission #1159098

#TimeUsernameProblemLanguageResultExecution timeMemory
1159098MisterReaperBootfall (IZhO17_bootfall)C++20
28 / 100
323 ms840 KiB
#include <bits/stdc++.h> using i64 = long long; #ifdef DEBUG #include "debug.h" #else #define debug(...) void(23) #endif constexpr int max_N = int(100) + 5; constexpr int max_A = max_N; constexpr int UB = max_N * max_A; using B = std::bitset<UB>; std::bitset<UB> pre[max_N], suf[max_N]; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int N; std::cin >> N; std::vector<int> A(N + 1); for (int i = 0; i < N; ++i) { std::cin >> A[i]; } bool bo[2] {}; for (int i = 0; i < N; ++i) { bo[A[i] & 1] = true; } if (bo[0] && bo[1]) { std::cout << "0\n"; return 0; } else if (N == 1) { std::cout << "0\n"; return 0; } pre[0][0] = true; for (int i = 0; i < N; ++i) { pre[i + 1] = pre[i] | (pre[i] << A[i]); } suf[N][0] = true; for (int i = N - 1; i >= 0; --i) { suf[i] = suf[i + 1] | (suf[i + 1] << A[i]); } N++; int sum = std::accumulate(A.begin(), A.end(), 0); auto check = [&]() -> bool { for (int i = 0; i < N - 1; ++i) { int nsum = sum - A[i]; if (nsum & 1) { return false; } int need = nsum >> 1; bool good = false; for (int k = 0; k <= need; ++k) { if (pre[i][k] && suf[i + 1][need - k]) { good = true; break; } if (k <= need - A[N - 1] && pre[i][k] && suf[i + 1][need - k - A[N - 1]]) { good = true; break; } } if (!good) { return false; } } return true; }; std::vector<int> ans; for (int i = bo[0] ? 0 : 1; i <= sum; i += 2) { A[N - 1] = i; if (~sum & 1 && pre[N - 1][sum >> 1]) { sum += i; if (check()) { ans.emplace_back(i); } sum -= i; } A[N - 1] = 0; } std::cout << ans.size() << '\n'; for (auto i : ans) { std::cout << i << " \n"[i == ans.back()]; } 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...