题意:给你N个开关,其中某些开关之间是相互影响的,即一个开关控制多个,那么每个开关操作与否为一个变元,有N个变元,开关之间相互影响的系数设为1,否则为0,对模2高斯消元求解自由变元个数。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=30;
int n,m;//有n个方程,m个未知数
int a[maxn][maxn];
int x[maxn];//解集
bool free_x[maxn];//判断是否为自由变元
int free_num;//记录自由变元的个数int gcd(int a,int b)
{return b==0?a:gcd(b,a%b);
}int lcm(int a,int b)
{return a*b/gcd(a,b);
}//返回-2表示有浮点数解,但无整数解;返回-1表示无解;返回fjfj0表示有唯一解;返回1表示有无穷个解
int gauss()
{int i,j,k;int max_r;//当前这列绝对值最大的行int col;//当前处理的列int ta,tb;int LCM;int temp;int free_x_num;int free_index;col=0;for(k=0;k<n&&col<m;k++,col++){//枚举当前处理的行max_r=k;for(i=k+1;i<n;i++){if(abs(a[i][col])>abs(a[max_r][col])) max_r=i;}if(max_r!=k){//与第k行交换for(j=k;j<m+1;j++) swap(a[k][j],a[max_r][j]);}if(a[k][col]==0){//说明该col列第k行以下全都是0了,则处理当前行的下一列k--;continue;}for(i=k+1;i<n;i++){//枚举要删去的行if(a[i][col]!=0){LCM=lcm(abs(a[i][col]),abs(a[k][col]));ta=LCM/abs(a[i][col]),tb=LCM/abs(a[k][col]);if(a[i][col]*a[k][col]<0) ta=-tb;//异号的情况是两个数相加for(j=col;j<m+1;j++){a[i][j]=((a[i][j]*ta)%2-(a[k][j]*tb)%2+2)%2;}}}}for(i=k;i<n;i++){if(a[i][col]!=0) return -1;}if(k<m){for(i=k-1;i>=0;i--){free_x_num=0;for(j=0;j<m;j++){if(a[i][j]!=0&&free_x[j]) free_x_num++,free_index=j;}if(free_x_num>1) continue;temp=a[i][m];for(j=0;j<m;j++){if(a[i][j]!=0&&j!=free_index) temp-=a[i][j]*x[j];}x[free_index]=temp/a[i][free_index];free_x[free_index]=0;}return m-k;//自由变元有m-k个}for(i=m-1;i>=0;i--){temp=a[i][m];for(j=i+1;j<m;j++){if(a[i][j]!=0) temp-=a[i][j]*x[j];}if(temp%a[i][i]!=0) return -2;x[i]=temp/a[i][i];}return 0;
}int c[maxn],t[maxn];int main()
{int k,x,y;scanf("%d",&k);while(k--){memset(a,0,sizeof a);memset(free_x,1,sizeof free_x);scanf("%d",&m);n=m;for(int i=0;i<m;i++) a[i][i]=1;for(int i=0;i<m;i++) scanf("%d",&c[i]);for(int i=0;i<m;i++) scanf("%d",&t[i]);while(scanf("%d%d",&x,&y)){if(x==0&&y==0) break;a[y-1][x-1]=1;}for(int i=0;i<n;i++){a[i][m]=(t[i]-c[i]+2)%2;}free_num=gauss();//cout<<"自由变元个数:"<<free_num<<endl;if(free_num==-1||free_num==-2) puts("Oh,it's impossible~!!");else printf("%d\n",(1<<free_num));}return 0;
}

POJ 1830 开关问题 高斯消元相关推荐

  1. poj 1830 开关问题 高斯消元

    题目链接 高斯消元模板, 判断是否有解以及变元的数量. 1 #include <iostream> 2 #include <vector> 3 #include <cst ...

  2. POJ 1753 Flip Game 高斯消元

    和1222,1681差不多 POJ 1222 高斯消元更稳 POJ 1681 高斯消元 枚举自由变元 equ = 16 ,var = 16的方程组 #include <cstdio> #i ...

  3. POJ 2947 Widget Factory (高斯消元解同余方程组)

    题意:N种物品,M条记录,接写来M行,每行有K,str1,str2,表示第i个记录从星期str1到星期str2,做了K件物品,接下来的K个数为物品的编号.求做每个物品所需的时间,并且最后结果在3-9之 ...

  4. poj 1753 Flip Game 高斯消元 异或方程组 求最值

    题目链接:http://poj.org/problem?id=1753 题意:给出一张4*4的图,表示16个方格的初始颜色的情况(白或黑),相邻方格操作的时候会相互影响,求最少的操作次数,使得每个方格 ...

  5. 开关问题 POJ - 1830 高斯消元

    开关问题 POJ - 1830 有N个相同的开关,每个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其他的与此开关相关联的开关也会相应地发生变化,即这些相联系的开关的状态如果原来为开就变 ...

  6. POJ 1830 开关问题 【01矩阵 高斯消元】

    任意门:http://poj.org/problem?id=1830 开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1 ...

  7. POJ 1222 1681 1830 3185 开关灯问题 (高斯消元 异或方程组)

    POJ 1222 EXTENDED LIGHTS OUT 基本的开关灯问题.还保证唯一解. 我们把每一个灯泡当成一个状态xi,总共有30个,而且每个灯与其他灯的关系也很明显.所以我们就可以列30方程3 ...

  8. pku 1830 开关问题(构造矩阵+高斯消元)

    开关问题 Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4653   Accepted: 1675 Description ...

  9. poj 1830 高斯消元

    终于会一点高斯消元了,认真学还是学的进去啊...... 搞明白解异或方程的原理,然后构造出矩阵就好做了.模板题 1 #include <cstdio> 2 #include <cst ...

最新文章

  1. squid在企业网中的应用
  2. HttpWebResponse 的问题
  3. loadrunner中并发数与迭代的区别
  4. 【英语学习】【医学】Unit 01 The Skeletal System
  5. Redis学习---(7)Redis 字符串(String)
  6. 热榜第一!GitHub 标星 5.6w,用 Python 实现所有算法!
  7. celery4+django2定时任务
  8. Java中关于参数的讲解_解读Java参数传递
  9. 把url地址复制到粘贴板上_写个简单的python爬虫爬取堆糖上漂亮的小姐姐
  10. 切图崽的自我修养-[ES6] 编程风格规范
  11. java 异常总结_Java异常的十大问题总结
  12. 给扔物线 HenCoder Plus 学员的一次分享文字版
  13. 公司企业邮箱IP被列入国际黑名单组织怎么解决
  14. 苹果x和xs买哪个好_苹果12和12pro哪个值得买_苹果12和12pro哪个好
  15. 28 | 机器学习:如何教会机器识别黑灰产?
  16. html中阳历生日转换成农历,公历转农历生日查询器,公历农历换算器?
  17. Cheat Engine(CE)-----下载安装及入门
  18. Snowy小诺 前端关闭Eslint校验 yarn
  19. 发现了吗?西部世界III在Broadway上的广告
  20. 【重磅】DeepMind开源史上最全强化学习框架OpenSpiel(附安装方法)

热门文章

  1. 分层强化学习综述:Hierarchical reinforcement learning: A comprehensive survey
  2. 纹理打包器 TexturePacker
  3. 莫听穿林打叶声,何妨吟啸且徐行。—第十八天
  4. sendfile详解
  5. 委派模式(Delegate)
  6. neon 指令 c语言,NEON初步使用
  7. 西影多媒体演示中心的消防应急照明和疏散指示系统
  8. ker矩阵是什么意思_矩阵求逆的几何意义是什么?
  9. 区块链开发指南_区块链开发权威指南
  10. 金庸--王重阳谈学习、旅游、谈交友等等