BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元

题意:

我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1。一个元素相邻的元素包括它本身,及他上下左右的4个元素(如果存在)。给定矩阵的行数和列数,请计算并输出一个和谐的矩阵。注意:所有元素为0的矩阵是不允许的。

分析:

设n*m个未知数,列n*m个方程

高斯消元解方程,注意全零矩阵不合法

那我们如果发现有自由元就将它们置为1就好了

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
#define p(x,y) ((x-1)*m+y)
int a[1700][1700];
int n,m;
int tx[]={-1,0,0,0,1};
int ty[]={0,-1,0,1,0};
int which[1700*1700],ins[1700*1700];
void build(){
int i,j,k;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
for(k=0;k<5;k++){
int dx=i+tx[k],dy=j+ty[k];
if(dx>=1&&dx<=n&&dy>=1&&dy<=m){
a[p(i,j)][p(dx,dy)]=1;
}
}
}
}
}
void Guass(){
int i=1,j=1,k,p;
while(i<=n*m&&j<=n*m){
for(k=i;k<=n*m;k++){
if(a[k][j])break;
}
if(a[k][j]){
if(k!=i){
for(p=j;p<=n*m+1;p++){
swap(a[k][p],a[i][p]);
}
}
for(k=i+1;k<=n*m;k++){
if(a[k][j]){
for(p=j;p<=n*m+1;p++){
a[k][p]^=a[i][p];
}
}
}
which[i]=j;
ins[j]=i;
i++;
}
j++;
}
if(i>n*m)return ;
int id=i;
for(k=1;k<=n*m;k++){
if(!ins[k]){
which[id]=k;
ins[k]=id++;
}
}
for(k=i;k<=n*m;k++){
a[k][n*m+1]=1;
}
for(k=i-1;k;k--){
for(p=which[k]+1;p<=n*m;p++){
if(a[k][p]){
a[k][n*m+1]^=a[ins[p]][n*m+1];
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
build();
Guass();
int i,j;
for(i=1;i<=n;i++){
int f=0;
for(j=1;j<=m;j++){
if(!f)f=
printf("%d",a[ins[p(i,j)]][n*m+1]);
else printf(" %d",a[ins[p(i,j)]][n*m+1]);
}
puts("");
}
}

BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元的更多相关文章

  1. bzoj 3503: [Cqoi2014]和谐矩阵【高斯消元】

    如果确定了第一行,那么可以推出来整个矩阵,矩阵合法的条件是n+1行全是0 所以推出来n+1行和1行的关系,然后用异或高斯消元来解即可 #include<iostream> #include ...

  2. BZOJ_1923_[Sdoi2010]外星千足虫_高斯消元+bitset

    BZOJ_1923_[Sdoi2010]外星千足虫_高斯消元 Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结 ...

  3. BZOJ_3270_博物馆_(高斯消元+期望动态规划+矩阵)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3270 \(n\)个房间,刚开始两个人分别在\(a,b\),每分钟在第\(i\)个房间有\(p[ ...

  4. bzoj 1444 AC自动机 + 矩阵乘法 | 高斯消元

    恶补了一下AC自动机,花了一天时间终于全部搞明白了. 思路:将每个人的串加入AC自动机,在AC自动机生成的状态图上建边,注意单词末尾的节点只能转移到自己概率为1, 然后将矩阵自乘几十次后误差就很小了, ...

  5. BZOJ 4031 HEOI2015 小Z的房间 基尔霍夫矩阵+行列式+高斯消元 (附带行列式小结)

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4031 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可 ...

  6. Broken robot CodeForces - 24D (三对角矩阵简化高斯消元+概率dp)

    题意: 有一个N行M列的矩阵,机器人最初位于第i行和第j列.然后,机器人可以在每一步都转到另一个单元.目的是转到最底部(第N个)行.机器人可以停留在当前单元格处,向左移动,向右移动或移动到当前位置下方 ...

  7. HDU4870_Rating_双号从零单排_高斯消元求期望

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 原题: Rating Time Limit: 10000/5000 MS (Java/Other ...

  8. BZOJ_1013_[JSOI2008]_球形空间产生器_(高斯消元)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1013 n维空间,给出球上n+1个点的n维坐标,求球心坐标. 提示:给出两个定义:1. 球心:到 ...

  9. 线性空间和异或空间(线性基)bzoj4004贪心+高斯消元优秀模板

    线性空间:是由一组基底构成的所有可以组成的向量空间 对于一个n*m的矩阵,高斯消元后的i个主元可以构成i维的线性空间,i就是矩阵的秩 并且这i个主元线性无关 /* 每个向量有权值,求最小权极大线性无关 ...

随机推荐

  1. 东方国信 - 软件开发人员面试问卷(ver1.001.002)

    1.    通用编程知识问卷(所有编程人员必做)... 1 1.1      SQL问卷... 1 1.2      翻译... 2 2.    Java问卷(Java程序员应答,其他跳过)... 2 ...

  2. [C#网络应用编程]1、对进程的操作

    在.net中,Process类提供了对进程进行管理的各种方法. 一.获取进程集合的方法: Process[] myProcesses = Process.GetProcesses();  //获取本地 ...

  3. springboot中使用分页,文件上传,jquery的具体步骤(持续更新)

    分页: pom.xml     加依赖 <dependency> <groupId>com.github.pagehelper</groupId> <arti ...

  4. Java并发-任务执行

    大多数的应用程序都是围绕"任务执行"来构造的:任务常常是一些抽象的并且离散的工作单元.我们把应用程序的工作分解到多个任务中,可以简化程序的组织结构,提供一种自然的事物便捷来优化错误 ...

  5. td默认文字超出后显示..,点击tr时td文字显示完整

    做项目时,产品提的需求,table表格里面,每一列限制文字超出宽度后显示省略号,等点击td时,文字显示完整,今天整理了一下代码,积累一下 备注:1.邮箱和网址,在td里面不会自动换行,需要增加word ...

  6. Spring结合log4j(slf4j)

    maven依赖         <!-- slf4j (级联:log4j/slf4j-api) --> <dependency>         <groupId> ...

  7. 将Excel表中的数据导入到数据库

    网上查到的有参考价值的就一家,自己调试发现可行.感谢原创文章:将Excel中数据导入数据库(一) using System; using System.Collections.Generic; usi ...

  8. C#System.Text.RegularExpressions.Regex使用(一) .

    需要引入命名空间 using System.Text.RegularExpressions;(若不引入,则写Regex时要写成 System.Text.RegularExpressions.Regex ...

  9. mysql数据库死锁的产生原因及解决办法

    这篇文章主要介绍了mysql数据库锁的产生原因及解决办法,需要的朋友可以参考下   数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同 ...

  10. CSS伪类详情

    参考:http://blog.csdn.net/Panda_m/article/details/50084699