大致题意:

  有5*6个灯,每个灯只有亮和灭两种状态,分别用1和0表示。按下一盏灯的按钮,这盏灯包括它周围的四盏灯都会改变状态,0变成1,1变成0。现在给出5*6的矩阵代表当前状态,求一个能全部使灯灭的解。

分析:

  题目已经提示我们,按两次和按零次是一样的效果,所以每个灯的解为0或者1。这样我们可以构造一个30*30的方程组,右边的常数列为灯的初始状态。

  影响当前灯的状态的按钮有5个

  a[i][j]+x[i][j]+x[i][j-1]+x[i-1][j]+x[i][j+1]+x[i][j+1]=0  (mod 2)

  x[i][j]+x[i][j-1]+x[i-1][j]+x[i][j+1]+x[i][j+1]=a[i][j]  (mod 2)

  不难发现,灯的初始状态只影响常数列,与系数矩阵无关,系数矩阵是不变的。

  消元的过程中系数也可以对2取模,按n次与按n+2次的效果是一样的。对2取模更方便的运算就是异或了。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; int n=30;
int a[35][35],x[35];
int mat[35][35]; void init()//初始化系数矩阵
{
int dx[]= {0,0,-1,0,1};
int dy[]= {0,-1,0,1,0};
for(int i=1; i<=5; i++)
{
for(int j=1; j<=6; j++)
{
for(int k=0; k<5; k++)
{
int x=i+dx[k];
int y=j+dy[k];
if(x>0 && x<=5 && y>0 && y<=6)
mat[(i-1)*6+j][(x-1)*6+y]=1;
}
}
}
} void Gauss(int equ,int var)
{
int row,col;
row=col=1;
while(row<=equ && col<=var)
{
//列非零主
int r=row;
for(int i=row; i<=equ; i++)
if(a[i][col]!=0)
{
r=i;
break;
}
if(r!=row)
{
for(int i=col; i<=var+1; i++)
swap(a[row][i],a[r][i]);
}
if(a[row][col]==0)//说明有自由变元
{
col++;
continue;
}
//消元
for(int i=row+1; i<=equ; i++)
{
if(a[i][col]==0) continue;
for(int j=col; j<=var+1; j++)
a[i][j]^=a[row][j];
}
row++;
col++;
}
for(int i=equ; i>=1; i--)
{
x[i]=a[i][var+1];
for(int j=i+1; j<=var; j++)
x[i]^=a[i][j]*x[j];
}
} int main()
{
int t,kase=1;
scanf("%d",&t);
init();
while(t--)
{
memset(a,0,sizeof(a));
for(int i=1; i<=30; i++)
scanf("%d",&a[i][31]);
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
a[i][j]=mat[i][j];
Gauss(n,n);
printf("PUZZLE #%d\n",kase++);
for(int i=1; i<=5; i++)
{
for(int j=1; j<6; j++)
printf("%d ",x[(i-1)*6+j]);
printf("%d\n",x[i*6]);
}
}
return 0;
}

POJ 1222 高斯消元更稳的更多相关文章

  1. *POJ 1222 高斯消元

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9612   Accepted: 62 ...

  2. POJ 1222 POJ 1830 POJ 1681 POJ 1753 POJ 3185 高斯消元求解一类开关问题

    http://poj.org/problem?id=1222 http://poj.org/problem?id=1830 http://poj.org/problem?id=1681 http:// ...

  3. POJ SETI 高斯消元 + 费马小定理

    http://poj.org/problem?id=2065 题目是要求 如果str[i] = '*'那就是等于0 求这n条方程在%p下的解. 我看了网上的题解说是高斯消元 + 扩展欧几里德. 然后我 ...

  4. POJ 2065 高斯消元求解问题

    题目大意: f[k] = ∑a[i]*k^i % p 每一个f[k]的值就是字符串上第 k 个元素映射的值,*代表f[k] = 0 , 字母代表f[k] = str[i]-'a'+1 把每一个k^i求 ...

  5. poj 2065 高斯消元(取模的方程组)

    SETI Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1735   Accepted: 1085 Description ...

  6. POJ 1681 高斯消元 枚举自由变元

    题目和poj1222差不多,但是解法有一定区别,1222只要求出任意一解,而本题需要求出最少翻转次数.所以需要枚举自由变元,变元数量为n,则枚举的次数为1<<n次 #include < ...

  7. POJ 1830 高斯消元

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

  8. Gym 100008E Harmonious Matrices 高斯消元

    POJ 1222 高斯消元更稳 看这个就懂了 #include <bits/stdc++.h> using namespace std; const int maxn = 2000; in ...

  9. POJ 1222 EXTENDED LIGHTS OUT(高斯消元)题解

    题意:5*6的格子,你翻一个地方,那么这个地方和上下左右的格子都会翻面,要求把所有为1的格子翻成0,输出一个5*6的矩阵,把要翻的赋值1,不翻的0,每个格子只翻1次 思路:poj 1222 高斯消元详 ...

随机推荐

  1. 2.9. 管道和重定向ls /proc && echo suss! || echo failed. 能够提示命名是否执行成功or失败; 与上述相同效果的是: if ls /proc; then echo suss; else echo fail; fi

    2.9. 管道和重定向 批处理命令连接执行,使用 | 串联: 使用分号 ; 前面成功,则执行后面一条,否则,不执行:&& 前面失败,则后一条执行: || ls /proc && ...

  2. 007.Ansible变量Fact,魔法变量和lookup生成变量

    一 fact变量 1.1  fact简介 ansible有一个模块叫setup,用于获取远程主机的相关信息,并可以将这些信息作为变量在playbook里进行调用.而setup模块获取这些信息的方法就是 ...

  3. Ansible_编写循环和条件任务

    一.利用循环迭代任务 1️⃣:Ansible支持使用loop关键字对一组项目迭代任务,可以配置循环以利用列表中的各个项目.列表中各个文件的内容.生成的数字序列或更为复杂的结构来重复任务 1.简单循环 ...

  4. Hibernate使用原生SQL语句进行无关联多表查询

    背景:有两个表:CpCg与CpGg需要进行多表查询 因为CpGg表设计到与另外的表也有联系,因此师兄没有关联此两个表,只是用字段进行逻辑关联,CpGg表的cp字段与CpCg表的id字段逻辑关联

  5. 五分钟带你读懂 堆 —— heap(内含JavaScript代码实现!!)

    一.概念  说起堆,我们就想起了土堆,把土堆起来,当我们要用土的时候,首先用到最上面的土.类似地,堆其实是一种优先队列,按照某种优先级将数字"堆"起来,每次取得时候从堆顶取.  堆 ...

  6. 六、.net core (.NET 6)程序部署到Docker上

    使用Docker部署应用程序 首先确保已经安装Docker 桌面软件,如下图: 然后,把需要部署到Docker上面的项目,咱们先添加Docker的支持,启动项目右键 -> 添加 -> Do ...

  7. 最适合新手的Redis Cluster搭建过程

    好记性不如烂笔头,记录分片高可用Redis Cluster的搭建过程 Redis集群演进过程 Redis单节点 主从复制: 复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复. 故 ...

  8. Volatile 原理及使用,java并发中的可见性问题

    1.解决并发编程中的可见性问题 volatile 代表不使用cpu缓存,修改后的数据,将直接刷到内存中,被volatile修饰的变量,读取的时候,也是从内存中读取,不从cpu缓存中读取 上代码 // ...

  9. GVS案例分享|乘新时代姑苏舫号,体验匠心智能控制

    水,是苏州的灵魂,串起苏州的古与今.动与静.金鸡湖景区位于苏州工业园区,总面积11.5平方公里,其中水域面积7.4平方公里. 新时代姑苏舫号,是金鸡湖景区极具苏式特征且规格超高的游览船型.船体分为上下 ...

  10. vue中dom节点转图片

    今天项目中有个需求,需要将页面的一部分转为图片,相当于存证之类的 然后我查阅了下百度,发现了几种可行的方法,特此来记录下 1.html2canvas插件 安装:npm install --save h ...