首页 > 学院 > 开发设计 > 正文

高斯消元&线性基模板

2019-11-08 19:29:08
字体:
来源:转载
供稿:网友

高斯消元:poj1222

#include <iostream>#include <cstdio>#define N 5#define M 6#define L 10using namespace std;int n,b[L*L],a[L*L][L*L],c[L*L];inline int read(){	int s=0; char c=getchar();	while (c<'0' || c>'9') c=getchar();	while (c>='0' && c<='9') s=s*10+c-'0',c=getchar();	return s;}inline void mod(int x,int y){	for (int i=1;i<=N*M;i++)		a[x][i]^=a[y][i];	b[x]^=b[y];}int main(){	n=read();	for (int t=1;t<=n;t++){		for (int i=1;i<=N;i++)			for (int j=1;j<=M;j++)				b[M*(i-1)+j]=read();		for (int i=1;i<=N;i++)			for (int j=1;j<=M;j++){				int x=M*(i-1)+j;				a[x][x]=1;				if (i>1) a[x][x-M]=1;				if (i<N) a[x][x+M]=1;				if (j>1) a[x][x-1]=1;				if (j<M) a[x][x+1]=1;			}		for (int i=1;i<=N*M;i++){			for (int j=i;j<=N*M;j++)				if (a[j][i]){					for (int k=1;k<=N*M;k++)						swap(a[j][k],a[i][k]);					swap(b[j],b[i]);				}			for (int k=1;k<=N*M;k++)				if (a[k][i] && k!=i) mod(k,i);			}		PRintf("PUZZLE #%d/n",t);		for (int i=1;i<=N;i++){			for (int j=1;j<M;j++)				printf("%d ",b[M*(i-1)+j]);			printf("%d/n",b[M*i]);		}	}	return 0;}线性基:bzoj3150

#include <bits/stdc++.h>#define N 110#define ll long longusing namespace std;int n,a[N],c[N],l(-1),z[N],x;ll ans(0);int main(){	scanf("%d",&n);	for (int i=1;i<=n;i++) scanf("%d",&a[i]);	sort(a+1,a+1+n);	for (int i=n;i;i--){		x=a[i];		for (int j=0;j<=32;j++)			if ((1<<j)&a[i]){				if (c[j]) a[i]^=c[j];				else{					c[j]=a[i]; break;				}		}		if (!a[i]) ans+=x;	}	printf("%lld/n",ans);	return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表