Submission #1208708

#TimeUsernameProblemLanguageResultExecution timeMemory
1208708lopkusBootfall (IZhO17_bootfall)C++20
44 / 100
1029 ms2872 KiB
#include <bits/stdc++.h> #define int long long void solve() { int n; std::cin >> n; std::vector<int> a(n + 1); for(int i = 1; i <= n; i++) { std::cin >> a[i]; } int sum = 0; for(int i = 1; i <= n; i++) { sum += a[i]; } const int N = 351 * 351 * 2; /** int dp[n + 1][N][n + 1]; for(int i = 0; i <= n; i++) { for(int sum = 0; sum < N; sum++) { for(int j = 0; j <= n; j++) { dp[i][sum][j] = 0; } } } for(int i = 0; i <= n; i++) { dp[0][0][i] = 1; } for(int i = 1; i <= n; i++) { for(int j = 0; j <= n; j++) { for(int sum = 0; sum < N; sum++) { dp[i][sum][j] = dp[i - 1][sum][j]; } if(i != j) { for(int sum = a[i]; sum < N; sum++) { dp[i][sum][j] |= dp[i - 1][sum - a[i]][j]; } } } }**/ std::vector<int> cnt(N); for(int j = 0; j <= n; j++) { std::bitset<N> newdp, olddp; olddp[0] = 1; for(int i = 1; i <= n; i++) { newdp = olddp; if(i != j) newdp |= (newdp << a[i]); olddp = newdp; } for(int i = 0; i < N; i++) { int t = sum; if(j == 0) { if(sum % 2 == 0 && newdp.test(sum / 2)) { cnt[i] += 1; } continue; } t += i; t -= a[j]; int k = 0; if(t < N && t % 2 == 0 && newdp.test(t / 2)) { k = 1; } t -= 2 * i; if(t >= 0 && t % 2 == 0 && newdp.test(t / 2)) { k = 1; } cnt[i] += k; } } std::vector<int> ans; for(int x = 0; x < N; x++) { if(cnt[x] == n + 1) { ans.push_back(x); } } std::cout << ans.size() << "\n"; for(int i = 0; i < ans.size(); i++) { std::cout << ans[i] << " "; } } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t = 1; //std::cin >> t; while (t--) { solve(); } 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...