Submission #1271230

#TimeUsernameProblemLanguageResultExecution timeMemory
1271230LucasLeBootfall (IZhO17_bootfall)C++20
100 / 100
201 ms5748 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]; long long dp[250001], f[250001]; int cnt[250001]; void solve() { std::cin >> N; for (int i = 1; i <= N; ++i) { std::cin >> a[i]; sum += a[i]; } if (N == 1) { std::cout << 0 << '\n'; return; } dp[0] = 1; for (int i = 1; i <= N; ++i) { for (int j = sum; j >= a[i]; --j) dp[j] += dp[j - a[i]]; } if ((sum & 1) || !dp[sum / 2]) { std::cout << 0 << '\n'; return; } f[0] = 1; for (int i = 1; i <= N; ++i) { for (int x = 0; x <= sum; ++x) { f[x] = dp[x]; if (x >= a[i]) f[x] -= f[x - a[i]]; if (f[x]) { int val = x * 2 + a[i] - sum; if (val >= 1 && val <= sum) cnt[val]++; } } } int ans = 0; for (int i = 1; i <= sum; ++i) if (cnt[i] == N) ans++; std::cout << ans << '\n'; for (int i = 1; i <= sum; ++i) if (cnt[i] == N) std::cout << i << ' '; } 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...