每个子任务都错0~3个点,不知道为啥qwq
#include <bits/stdc++.h>
#define F(i, j, k) for(int (i)=(j); (i)<=(k); (i)++)
#define R(i, j, k) for(int (i)=(j); (i)>=(k); (i)--)
using namespace std;
const int MAXN=1e5+7, INF=2e9;
struct node{
int key, id;
}b[MAXN];
int n, a[MAXN], minn=INF, sum, tmp;
bool vis[MAXN];
inline int lowbit(int x)
{
return x&-x;
}
inline int read()
{
int x=0; bool f=0; char c;
while(!isdigit(c=getchar())) if(c=='-') f=1;
do x=(x<<1)+(x<<3)+(c&15); while(isdigit(c=getchar()));
return f?-x:x;
}
bool cmp(node _a, node _b){
return _a.key<_b.key;
}
signed main()
{
n=read();
F(i, 1, n)
a[i]=read(), minn=min(minn, lowbit(a[i]));
if(n%2==0){
cout<<1<<endl;
F(i, 1, n)
cout<<i%2;
return 0;
}
F(i, 1, n)
sum+=a[i]=2-(a[i]/minn)%2;
if(sum%2==1){
cout<<-1;
return 0;
}
cout<<minn*2<<endl;
F(i, 1, n)
b[i]={a[i], i};
sort(b+1, b+n+1, cmp);
F(i, 1, n){
tmp+=b[i].key;
vis[b[i].id]=1;
if(tmp>=sum/2){
if(tmp>sum/2)
F(j, 1, n)
if(tmp-b[i].key==sum/2) {
vis[b[i].id]=0;
break;
}
break;
}
}
F(i, 1, n)
printf("%d", vis[i]);
return 0;
}