bitset 优化高斯消元求调
查看原帖
bitset 优化高斯消元求调
501947
DengDuck鄧德楼主2024/8/17 12:04
#include<bits/stdc++.h>
using namespace std;
int T,n;
const int N=35;
bitset<N>B[N],St,Ed;
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		St.reset(),Ed.reset();
		for(int i=1;i<=n;i++)B[i].reset();
		for(int i=1,x;i<=n;i++)
		{
			scanf("%d",&x);
			St[i]=x;
			B[i][i]=1;
		}
		for(int i=1,x;i<=n;i++)
		{
			scanf("%d",&x);
			Ed[i]=x;
		}
		Ed^=St;	
		while(1)
		{
			int x,y;
			scanf("%d%d",&x,&y);
			if(x==0&&y==0)break; 
			B[y][x]=1;
		}
		int Res=0;
		for(int i=1;i<=n;i++)
		{
			for(int j=i+1;j<=n;j++)
			{
				if(B[j][i])
				{
					swap(B[j],B[i]);
					break;
				}
			}
			if(!B[i][i])Res++;
			for(int j=1;j<=n;j++)
			{
				if(j==i)continue;
				if(B[j][i])B[j]^=B[i],Ed[j]=Ed[j]^Ed[i];
			}	
		}
		int Flg=0;
		for(int i=1;i<=n;i++)
		{
			if(!B[i].count()&&Ed[i])
			{
				Flg=1;
				break;
			}
		}
		if(Flg)puts("Oh,it's impossible~!!");
		else cout<<(1<<Res)<<endl;
	}
} 
2024/8/17 12:04
加载中...