이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define mp make_pair
#define pb push_back
#define a first
#define b second
//#define endl '\n'
llo n;
llo it[501];
llo vis[501*501];
bitset<501*501> ss;
llo su=0;
void solve(llo l,llo r){
if(l==r){
for(llo i=1;i<=500*500;i++){
llo x=(i+su-it[l]);
if(x%2==0){
if(ss[x/2]){
}
else{
vis[i]=1;
}
}
else{
vis[i]=1;
}
}
}
else{
bitset<501*501> tt=ss;
llo mid=(l+r)/2;
for(llo i=mid+1;i<=r;i++){
ss|=(ss<<it[i]);
}
solve(l,mid);
ss=tt;
for(llo i=l;i<=mid;i++){
ss|=(ss<<it[i]);
}
solve(mid+1,r);
ss=tt;
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>n;
bitset<501*501> kk;
kk[0]=1;
for(llo i=0;i<n;i++){
cin>>it[i];
su+=it[i];
kk|=(kk<<it[i]);
}
ss[0]=1;
solve(0,n-1);
vector<llo> cur;
for(llo i=1;i<=500*500;i++){
if(vis[i]==0){
cur.pb(i);
}
}
if(su%2==1){
cur.clear();
}
else{
if(kk[su/2]==0){
cur.clear();
}
}
cout<<cur.size()<<endl;
for(auto j:cur){
cout<<j<<" ";
}
cout<<endl;
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... |