제출 #1270723

#제출 시각아이디문제언어결과실행 시간메모리
1270723LucasLeBootfall (IZhO17_bootfall)C++20
65 / 100
1067 ms13184 KiB
#include <bits/stdc++.h> #define fi first #define se second #define ld long double #define pii std::pair<int, int> #define piii std::pair<pii, pii> #define rep(i,a) for (int i = 0; i < a; ++i) #define per(i,a) for (int i = a - 1; i >= 0; --i) int N; int sum; int a[505]; std::bitset<250001> dp[502]; void solve() { std::cin >> N; for (int i = 1; i <= N + 1; ++i) dp[i][0] = 1; bool odd = false, even = false; for (int i = 1; i <= N; ++i) { std::cin >> a[i]; sum += a[i]; if (a[i] & 1) odd = true; else even = true; } if (N == 1) { std::cout << 0 << '\n'; return; } for (int i = 1; i <= N + 1; ++i) { for (int j = 1; j <= N; ++j) if (i != j) { dp[i] |= (dp[i] << a[j]); } } if ((sum & 1) || !dp[N + 1][sum / 2] || (odd && even)) { std::cout << 0 << '\n'; return; } int ans = 0, x = 1; std::vector<int> res; if ((sum + x - a[1]) & 1) x = 2; for (; x <= sum; x += 2) { bool ok = true; for (int i = 1; i <= N; ++i) { int cur_sum = sum + x - a[i]; if (cur_sum & 1) { ok = false; break; } if (!dp[i][cur_sum / 2]) { ok = false; break; } } if (ok) { ans++; res.push_back(x); } } std::cout << ans << '\n'; for (int x : res) std::cout << x << ' '; } int main() { // std::freopen("input.txt", "r", stdin); // std::freopen("palin.inp", "r", stdin); // std::freopen("sushi.out", "w", stdout); std::ios_base::sync_with_stdio(false); std::cin.tie(0); int T = 1; // std::cin >> T; while (T--) solve(); } // 14 / 2 (87.5% Rate)
#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...