제출 #1270646

#제출 시각아이디문제언어결과실행 시간메모리
1270646LucasLeBootfall (IZhO17_bootfall)C++20
65 / 100
365 ms6152 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<122502> dp[355]; bool check(int x) { for (int i = 1; i <= N; ++i) { int cur_sum = sum + x - a[i]; if (cur_sum & 1) { return false; } if (!dp[i][cur_sum / 2]) return false; } return true; } void solve() { std::cin >> N; for (int i = 1; i <= N + 1; ++i) dp[i][0] = 1; for (int i = 1; i <= N; ++i) { std::cin >> a[i]; sum += a[i]; } 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]) { std::cout << 0 << '\n'; return; } int ans = 0; std::vector<int> res; for (int x = 1; x <= sum; ++x) { if (check(x)) { 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...