Submission #333669

#TimeUsernameProblemLanguageResultExecution timeMemory
333669amunduzbaevBootfall (IZhO17_bootfall)C++14
100 / 100
278 ms3612 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define all(x) x.begin(), x.end() #define pb push_back const int N = 250000; int dp[N], used[N]; int main(){ int n; cin>>n; vector<ll>a(n); ll sum = 0; for(int i=0;i<n;i++){ cin>>a[i]; sum += a[i]; } sort(all(a)); dp[0] = 1; for(int i=0;i<n;i++){ for(int j=sum; j>= a[i]; j--){ dp[j] += dp[j - a[i]]; } } if(sum & 1 || !dp[sum/2]){ cout<<0; return 0; } int cur = sum; for(int i=0;i<n;i++){ for(int j=a[i]; j<= sum; j++){ dp[j] -= dp[j - a[i]]; } cur -= a[i]; for(int j = cur/2; j <= sum - a[i]; j++){ if(dp[j] && j*2 > (sum - a[i])){ used[j*2 - (sum - a[i])] ++; } } cur += a[i]; for(int j = sum; j >= a[i]; j--){ dp[j] += dp[j - a[i]]; } } vector<int>ans; for(int i=1; i<=sum; i++){ if(used[i] == n) ans.pb(i); } cout<<ans.size()<<'\n'; for(auto x:ans) cout<<x<<" "; return 0; } /* 4 1 3 1 5 6 3 5 7 11 9 13 3 2 2 2 4 200 200 200 200 */
#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...