题意:有一个5 * 6的矩阵,每个位置表示灯,1表示灯亮,0表示灯灭。 
然后如果选定位置i,j点击,则位置i,j和其上下左右的灯的状态都会反转。 
现在要你求出一个5 * 6的矩阵,1表示这个灯被点击过,0表示没有。 
要求这个矩阵能够使得原矩阵的灯全灭。 

开始没有理解到说的那个at bt ct 是什么
其实是在A[i][j]按下去的时候他所影响到的 li位置处的状态,这个状态在一个矩阵的M*N 的N M确定之后就随着确定了,不过我没有找到其中的规律,><
然后利用模2加的性质就是相当于异或运算,就可以构造出方程式来出x(i,j)的每一个值
https://blog.csdn.net/u013508213/article/details/47263183

#include <iostream>// 用G++,还有就是不能外挂
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
//#define IO  ios::sync_with_stdio(false),cin.tie(0), cout.tie(0);
//#pragma comment(linker, "/STACK:1024000000,1024000000")
void ex_gcd(int a, int b, int &d, int &x, int &y) { if (!b) { x = 1; y = 0; d = a; } else { ex_gcd(b, a%b, d, y, x); y -= x * (a / b); }; }
int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
int lcm(int a,int b){return a/gcd(a,b)*b;}//先除后乘防溢出
int inv_exgcd(int a, int m) { int d, x, y;ex_gcd(a, m, d, x, y);return d == 1 ? (x + m) % m : -1; }
typedef long long ll;
const int maxn=1e3;
using namespace std;
int a[maxn][maxn];
int x[maxn];
int n,m;
bool free_x[maxn];//记录不确定的变元
void init()
{memset(a,0,sizeof(a));for(int i=0;i<5;++i)for(int j=0;j<6;++j)///表示对这个A[i][j]确定的上下左右的每个位置的状态进行初始化没有找到其中的规律{int t=i*6+j;a[t][t]=1;if(i>0)a[(i-1)*6+j][t]=1;if(i<4)a[(i+1)*6+j][t]=1;if(j>0)a[i*6+j-1][t]=1;if(j<5)a[i*6+j+1][t]=1;}
}
int Gauss(int equ,int var)
{int max_r,col,k;int ta,tb;int Lcm;int temp;int free_x_num=0,free_index;for(int i=0;i<=var;++i) x[i]=0,free_x[i]=true;//转化为阶梯例col=0;//当前列for( k=0,col=0;k<equ&&col<var;++k,++col){//枚举当前行max_r=k;for(int i=k+1;i<equ;++i)if(abs(a[i][col])>abs(a[max_r][col]))max_r=i;if(max_r!=k)for(int i=k;i<=var;++i) swap(a[k][i],a[max_r][i]);///i=0;if(!a[k][col]){k--;continue;//处理下一列}for(int i=k+1;i<equ;++i){//化为阶梯型if(a[i][col]){
//              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)tb=-tb;for(int j=col;j<=var;++j){a[i][j]^=a[k][j];//((a[i][j]*ta-a[k][j]*tb));}}}}for(int i=k;i<equ;++i)// 无解if(a[i][col]) return -1;if(k<var)// 无穷解{///这这儿可以直接 return var-k;不用求出未知元
//        for(int i=k-1;i>=0;--i)
//        {
//            free_x_num=0;//用于判断不确定性变元的数量,若超过一个仍然无法求解(无解)
//            for(int j=0;j<var;++j)
//                if(a[i][j]&&free_x[j])free_x_num++,free_index=j;
//            if(free_x_num>1)continue;
//            temp=a[i][var];
//            for(int j=0;j<var;++j)
//            {
//                if(a[i][j]&&j!=free_x_num)temp=(temp-a[i][j]*x[j]);
//            }
//            x[free_index]=(temp/a[i][free_index])%7;
//            free_x[free_index]=false;
//        }return var-k;}//唯一解for(int i=var-1;i>=0;--i){temp=a[i][var];for(int j=i+1;j<var;++j)if(a[i][j])temp=(temp^(a[i][j]&&x[j]));//cout<<temp<<endl;x[i]=temp;}return 0;
}
int main()
{int t;cin>>t;for(int ca=1;ca<=t;++ca){init();for(int i=0;i<30;++i)scanf("%d",&a[i][30]);int free_num=Gauss(30,30);printf("PUZZLE #%d\n",ca);for(int i=0;i<30;++i){printf("%d",x[i]);if((i+1)%6==0)printf("\n");elseprintf(" ");}}return 0;
}

poj1222开关问题相关推荐

  1. POJ1222熄灯问题(枚举练习题)

    文章目录 题目描述 题目分析 代码(Java) 题目描述 这道题来自 POJ1222 ,题目描述如下: 有一个由按钮组成的矩阵,其中每行有 6 个按钮,共 5 行.每个按钮的位置上有一盏灯.当按下一个 ...

  2. 开关面板如何自己印字_如何自己动手做一个智能开关

    现在的智能家居这么火,对于想自己动手的小伙伴们来说,都想自己去做一些家里使用 的智设备.现在的中国不缺卖唱卖惨的,缺的是能动手创造一些能实际使用的而不是哗众取宠的人,天天喊着要反击外国技术封锁.那么我 ...

  3. javascript开关_JavaScript开关案例简介

    javascript开关 In this short article, I will introduce you to JavaScript switch cases and how to use t ...

  4. 多键开关 android8.0,手机桌面多键开关(SwitchPro Widget )

    7键开关SwitchPro Widget 是款主屏幕窗口小部件工具,可用于开启/关闭多种系统功能,支持多种自定义设置,比原生的电量控制开关好用很多. 7键开关SwitchPro Widget并非只有7 ...

  5. ansys大变形开关要不要打开_ANSYS不收敛问题的解决办法

    笔者应聘时发现此公众号内容也备受同行专家认可, 继续努力,再接再厉! 本文经验是基于仿真秀专家学者总结,在此感谢仿真秀的支持与鼓励. 80%的线性不收敛都是因为接触问题!!! 一.材料问题的不收敛可以 ...

  6. Matlab编程与数据类型 -- 开关语句switch/end

    本微信图文详细介绍了Matlab中switch/end开关语句.

  7. 九、将cs文件快速的转换成可执行文件和响应文件(配置编译开关的文件)

    1.将包含多个类型的源代码文件转换为可以部署的文件.有如下Program.cs的文件,代码如下: public sealed class Program{public static void Main ...

  8. 77底盒和86底盒的区别_86型开关底盒的具体参数

    展开全部 86型开关底盒参数: 1. 标准尺寸:86毫米62616964757a686964616fe4b893e5b19e31333365663533*86毫米. 2.安装孔中心距 60毫米. 2. ...

  9. 上线稳定性如何保证?开关编程很有用

    在日常工作中,无论是一周一个迭代,还是两周一个迭代,都避免不了上线的环节.唯一的区别就是上线的频次不同而已.那么我们如何保证在这么高频次的发版里面同时保证稳定性呢? 答案就是开关编程,所谓的开关编程其 ...

最新文章

  1. ASP.NET清除页面缓存的方法
  2. camerax 自动聚焦_Android实现手机摄像头的自动对焦
  3. Docker批量操作容器
  4. 关于MyEclipse对Struts2配置文件较检异常 Invalid result location value/parameter
  5. 奇妙的安全旅行之ECC算法
  6. 基于BFS+DFS+CoordinateDescent的motion planning设计思路
  7. 燃料电池厂商的市场竞争
  8. 【window】Windows10下为PHP安装redis扩展
  9. [JOYOI1326] 剑人合一
  10. 51Nod 1002:数塔取数问题(DP)
  11. php+mysql+zend+一键_PHP+MySQL+phpMyAdmin+ZendOptimizer环境一键安装包下载及安装手
  12. 【Python脚本进阶】1.2、python脚本基础知识(下)
  13. SpringBoot 错误:Field userService in com.lyh.Controller.UserController required a bean of...
  14. 安装itunes需要管理员身份_iTunes安装失败 iTunes安装出错解决方法
  15. 云服务器应用打不开,云虚拟主机网站打不开等常见错误提示解决方法
  16. 正睿17+2天集训总结TOT
  17. Wireshark分析sql布尔盲注流量包
  18. 腾讯云老用户重新注册新账号算新用户吗?
  19. java 初始化数组_java如何实现数组初始化
  20. Could not find  artifact org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde

热门文章

  1. HDU-4516 威威猫系列故事——因式分解 多项式分解
  2. 【转】Android OTA 升级之一:编译升级包
  3. Paired Joint Coordinates
  4. 学点 C 语言(41): 函数 - 关于 main 函数
  5. 在fstab下添加网络启动设备
  6. android启动---lk入口文件crt0.s解析
  7. Firefox 65.0.2 发布,Firefox 66 预计3月19日推出
  8. [译] 最佳安全实践:在 Java 和 Android 中使用 AES 进行对称加密
  9. 纯JS制作的窗户雨滴效果
  10. 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词