This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |