比赛 “Asm.Def战记之拉格朗日点”杯 评测结果 AWAWWWWAWW
题目名称 Asm.Def的微小贡献 最终得分 30
用户昵称 fyb 运行时间 0.005 s
代码语言 C++ 内存使用 0.37 MiB
提交时间 2015-11-04 11:29:23
显示代码纯文本
//sorry,God Madoka.

#include <cstdio>
#include <algorithm>

using namespace std;

#define NMAX 1000
#define LMAX 60

long long ma[NMAX+1];
long long tma[NMAX+1];
bool a[LMAX+1][NMAX+1];
bool b[NMAX+1];

int main(){
	int n,l;
	int p,num=0;
	bool tmp;
	int i,j,k;

	freopen("asm_contribute.in","r",stdin);
	freopen("asm_contribute.out","w",stdout);

	scanf("%d",&n);
	l=min(n,LMAX);
	for(i=1;i<=n;i++){
		scanf("%lld",ma+i);
		tma[i]=ma[i];
	}

	for(i=1;i<=n;i++)
		for(j=1;j<=l;j++){
			a[j][i]=tma[i]%2;
			tma[i]=tma[i]>>1;
		}

	for(i=1;i<l;i++){
		for(j=i;j<=l;j++)
			if(a[j][i])break;
		if(j<=l){
			p=j;
			for(++j;j<=l;j++)
				if(a[j][i])
					for(k=i;k<=n;k++)
						a[j][k]^=a[p][k];
		}
	}

	for(i=l;i<=n;i++)
		if(!a[LMAX][i]){
			b[i]=true;
			break;
		}
	if(i>n){
		if(n>l)b[l]=b[l+1]=true;
		else b[l]=false;
	}

	for(i=l-1;i>0;i--){
		tmp=false;
		for(j=i+1;j<=n;j++)
			tmp^=a[i][j]&&b[j];
		b[i]=tmp;
	}

	for(i=1;i<=n;i++)
		if(b[i])num++;
	printf("%d\n",num);
	for(i=1;i<=n;i++)
		if(b[i])printf("%d ",i);
	putchar('\n');
	return 0;
}