Submission #1270439

#TimeUsernameProblemLanguageResultExecution timeMemory
1270439reginoxBootfall (IZhO17_bootfall)C++20
65 / 100
1012 ms1720 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define all(v) begin(v), end(v) #define pi pair<int, int> #define vi vector<int> using namespace std; const int N = 5e2; int n, a[N+2]; int cnt[N*N+2]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; for(int i = 1; i <= n; i++) cin >> a[i]; int su = accumulate(a+1, a+n+1, 0); int mx = *max_element(a+1, a+n+1); bitset<N*N> dp; dp.reset(); dp[0] = 1; for(int i = 1; i <= n; i++) dp |= (dp << a[i]); if(su % 2 != 0 || !dp[su/2]){ cout << 0; return 0; } if(su - mx < 1){ cout << 0; return 0; } for(int i = 1; i <= n; i++){ bitset<N*N> dp2; dp2.reset(); dp2[0] = 1; for(int j = 1; j <= n; j++) if(i != j) dp2 |= (dp2 << a[j]); vector<bool> ck(su-mx+1, 0); for(int j = 0; j <= su - a[i]; j++){ if(dp2[j]){ int x = abs(su-a[i]-2*j); if(x >= 1 && x <= su - mx){ if(!ck[x]){ ck[x] = true; cnt[x]++; } } } } } vector<int> ans; for(int i = 1; i <= N*N; i++){ if(cnt[i] == n) ans.push_back(i); } cout << ans.size() << "\n"; for(auto x:ans) cout << x << " "; 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...