这题答案就是2^自由元的数目,原因是自由元可以取1或者0,所以就是ans<<1

由于只要求自由元的数目,所以高斯消元可以直接消后面的,不做前面的了,对答案没有影响

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define MAXN 35
using namespace std;
int a[MAXN][MAXN];
int gauss(int m,int n){
int ret=,line=;
for(int k=;k<=m;k++){
int i=line;
while(i<=m){if(a[i][k])break;i++;}
if(i>m){ret++;continue;}//自由元
if(i!=line){for(int j=k;j<=n;j++)swap(a[i][j],a[line][j]);}
for(i=line+;i<=m;i++){
if(a[i][k]){
for(int j=k;j<=n;j++){
a[i][j]^=a[line][j];
}
}
}
line++;
}
for(int i=line;i<=m;i++)if(a[i][n])return -;
//最后一定都消成0了,所以a[i][n]必须为0才符合题意
return ret;
}
int n;
void solve(){
memset(a,,sizeof(a));
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i][n+]);
int x,y;
for(int i=;i<=n;i++){scanf("%d",&x);a[i][n+]^=x;}
for(int i=;i<=n;i++){a[i][i]=;}
while(){
scanf("%d%d",&x,&y);
if(!x&&!y)break;
a[y][x]=;
}
int ans=gauss(n,n+);
if(-==ans)printf("Oh,it's impossible~!!\n");
else printf("%d\n",<<ans);
}
int main()
{
// freopen("data.in","r",stdin);
int T;
scanf("%d",&T);
while(T--){
solve();
}
return ;
}

最新文章

  1. 【HTML5】Canvas图像
  2. DuiLib学习笔记(二) 扩展CScrollbar属性
  3. default constructor,copy constructor,copy assignment
  4. uva 10129 play on words——yhx
  5. Thread create 创建进程
  6. BZOJ 1093 最大半连通子图
  7. Kylin上chromium不能用flash的解决命令
  8. Linux基本命令(9)定位、查找文件的命令
  9. oprofile使用方法
  10. HBase 4、Phoenix安装和Squirrel安装
  11. android样式布局---&amp;gt;ListView(附上源代码)
  12. PPT资料下载 - 问题驱动的软件测试设计:强化测试用例设计
  13. 16.python-I/O模型
  14. autotools
  15. MySQL慢查询1- 开启慢查询
  16. python list 和 tuple, dict 用于迭代代价
  17. 如何在MyEclipse中将项目部署Tomcat
  18. What is the fastest way of (not) logging?
  19. CDC--Demo
  20. scala之Duration

热门文章

  1. 团队作业7-Beta版本冲刺计划及安排
  2. android使用sharesdk的小感
  3. 【作业】HansBug的前三次OO作业分析与小结
  4. vue mint-ui 三级地址联动
  5. Andrew Ng机器学习第一章——单变量线性回归
  6. linux命令行传递参数定期执行PHP文件
  7. 写一个vue组件
  8. hadoop2.6.0实践:引入开发依赖的jar包
  9. MicrosoftWebInfrastructure 之坑
  10. ssh整合之四单独搭建struts的运行环境