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 pb push_back
#define mp make_pair
#define ll long long
#define int long long
#define itr iterator
typedef pair<ll,ll> pii;
const ll MAX=3e5+9;
const ll LIM=3e5;
const ll mod=1e9+7;
bitset<LIM> bs;
ll N,sum,arr[MAX],dp[MAX];
void TakeMod(ll &X,ll Y)
{
while(X<0)
X+=Y;
while(X>=Y)
X-=Y;
return ;
}
void add(ll X)
{
sum+=X;
for(int A=LIM;A>=X;A--)
{
dp[A]+=dp[A-X];
TakeMod(dp[A],mod);
}
return ;
}
void remove(ll X)
{
sum-=X;
for(int A=X;A<LIM;A++)
{
dp[A]-=dp[A-X];
TakeMod(dp[A],mod);
}
return ;
}
signed main()
{
ios_base::sync_with_stdio(false);
dp[0]=1;
cin>>N;
for(int A=1;A<=N;A++)
{
cin>>arr[A];
add(arr[A]);
}
if(sum%2 or (!dp[sum/2]))
return cout<<0,0;
for(int A=1;A<=LIM;A++)
bs[A]=1;
for(int A=1;A<=N;A++)
{
remove(arr[A]);
for(int B=1;B<=LIM;B++)
if(B>sum or (sum+B)%2 or (!dp[(sum+B)/2]))
bs[B]=0;
add(arr[A]);
}
vector<int> vec;
for(int A=1;A<=sum;A++)
if(bs[A])
vec.pb(A);
cout<<vec.size()<<"\n";
for(auto A:vec)
cout<<A<<" ";
return 0;
}
# | 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... |