基本思路。首先构造一个n*(m+1)的矩阵,同时标记一个行数row,row从零开始,然后找出每一列第一个非零的数,和第row行互换,

然后对row到n行,异或运算。最终的结果为2^(m-row)

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int array[55][55],n,m,h[55][55];
int main()
{
	int i,j,k,t,a,q;
	scanf("%d",&t);
	for(int v=1;v<=t;v++)
	{
		memset(array,0,sizeof(array));
		memset(h,0,sizeof(h));
		scanf("%d%d",&n,&m);
		for(i=0;i<m;i++)
		{
			scanf("%d",&k);
			while(k--)
			{
				scanf("%d",&a);
				array[a-1][i]=1;
			}
		}
		for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			h[i][j]=array[i][j];
		printf("Case %d:\n",v);
		scanf("%d",&q);
		while(q--)
		{
			for(i=0;i<n;i++)
			for(j=0;j<m;j++)
				array[i][j]=h[i][j];
			for(i=0;i<n;i++)
				scanf("%d",&array[i][m]);
			/*for(i=0;i<n;i++)
			{
				for(j=0;j<=m;j++)
					printf("%d ",array[i][j]);
				printf("\n");
			}*/
			__int64 ans=1;
			int row=0;
			for(i=0;i<m;i++)
			{
				for(j=row;j<n;j++)
					if(array[j][i])
						break;
				if(j==n)continue;
				if(j!=row)
				{
					for(k=0;k<=m;k++)
						swap(array[row][k],array[j][k]);
				}
				for(j=row+1;j<n;j++)
				{
					if(array[j][i])
					{
						for(k=0;k<=m;k++)
							array[j][k]^=array[row][k];
					}
				}
				row++;//这里不用担心row超过n,因为从n行开始,每行的数字都是0
			}
				for(j=row;j<n;j++)
					if(array[j][m])
					{
						ans=0;
						break;
					}
				int tmp=m-row;
				while(tmp--)
					ans*=2;
			printf("%I64d\n",ans);
		}
	}
	return 0;
}

最新文章

  1. 如何提升我的HTML&amp;CSS技术,编写有结构的代码
  2. VIJOS P1037搭建双塔[DP]
  3. Linux vmstat命令实战详解
  4. BZOJ 1013 &amp; 高斯消元
  5. CentOS安装视频播放器SMPlayer
  6. 【USACO 2.4.1】两只塔姆沃斯牛
  7. 正则如何匹配div下的所有&lt;li&gt;标签?
  8. WCF学习心得----(三)服务承载
  9. sudo命令出错 must set be suid
  10. easyui datebox定位到某一个日期, easyui datebox直接定位到具体的日期, easyui datebox MoveTo方法使用
  11. Linux(二)CentOS的安装
  12. 如果在ie上报错又找不到问题原因该怎么办?
  13. python 读取指定div的内容
  14. Linux中通过Socket文件描述符寻找连接状态介绍
  15. ELK+SpringBoot+Logback离线安装及配置
  16. 函数和常用模块【day06】:shelve模块(五)
  17. 如何搭一个vue项目
  18. Linux IP和网关配置
  19. 《PHP, MySQL, Javascript和CSS》读书随手记----php篇
  20. 设计模式之开放-封闭原则(引申出Objective-C中继承、Category、Protocol三者的区别,这点面试常问)

热门文章

  1. Java 之关键字 null 使用总结
  2. WEB浏览器与服务器通讯过程
  3. 【腾讯开源】Android性能测试工具APT使用指南
  4. Mysql基础之字符集与乱码
  5. ps入门教程:画笔工具、铅笔工具、渐变工具等的使用
  6. Object.prototype.propertyIsEnumerable
  7. php中使用随机数
  8. 学习GDI+ (1)
  9. IP地址爬取
  10. Glue4Net简单部署基于win服务的Socket程序