蒟蒻,求助,悬赏关注
查看原帖
蒟蒻,求助,悬赏关注
532745
Nangu楼主2023/8/21 12:51

每个子任务都错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;
}
2023/8/21 12:51
加载中...