이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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... |