Description

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

Input

输入一行,包含两个空格分隔的整数m和n,分别表示矩阵的行数和列数。

Output

输出包含m行,每行n个空格分隔整数(0或1),为所求矩阵。测试数据保证有解。

设(x,y)为某个位置的取值(出界视为0),则有(x,y)^(x-1,y)^(x+1,y)^(x,y-1)^(x,y+1)=0

即(x^y)=(x-1,y-1)^(x,y-1)^(x+1,y-1)^(x,y-2)

由此确定矩阵第一行即确定了整个矩阵,若合法则矩阵第m+1行计算结果为全0 (不全0则第m行不合法)。

设第一行为未知数,计算出第m+1行由第一行哪些位置的值异或得到,建立异或方程组,高斯消元求解即可。

若一个元无法确定则定为1。

时间复杂度O(n2m+n3),若数据规模更大则可以考虑压位。

#include<cstdio>
int n,m;
int f[][][];
int xs[][],ys[],as[];
int main(){
scanf("%d%d",&m,&n);
for(int i=;i<=n;i++)f[][i][i]=,as[i]=;
for(int i=;i<=m+;i++){
for(int j=;j<=n;j++){
for(int k=;k<=n;k++)f[i][j][k]=f[i-][j-][k]^f[i-][j][k]^f[i-][j+][k]^f[i-][j][k];
}
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)xs[i][j]=f[m+][i][j];
}
int w=;
for(int i=;i<=n;i++){
for(int j=w;j<=n;j++){
if(xs[j][i]){
for(int k=;k<=n;k++){int a=xs[j][k];xs[j][k]=xs[w][k];xs[w][k]=a;}
int c=ys[j];ys[j]=ys[w];ys[w]=c;
break;
}
}
if(!xs[w][i])continue;
int yv=ys[w];
for(int j=w+;j<=n;j++){
if(xs[j][i]){
ys[j]^=ys[w];
for(int k=;k<=n;k++)xs[j][k]^=xs[w][k];
}
}
w++;
}
for(int i=n;i>=;i--){
int mx=;
while(mx<=n&&!xs[i][mx])mx++;
if(mx>n)continue;
for(int j=mx+;j<=n;j++){
if(xs[i][j])xs[i][j]=,ys[i]^=as[j];
}
as[mx]=ys[i];
}
for(int i=;i<=m;i++){
for(int j=;j<=n;j++){
int v=;
for(int k=;k<=n;k++)if(as[k]&&f[i][j][k])v^=;
printf("%d ",v);
}
putchar();
}
return ;
}

bzoj3503 和谐矩阵的更多相关文章

  1. 【高斯消元】BZOJ3503 [Cqoi2014]和谐矩阵

    3503: [Cqoi2014]和谐矩阵 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1197  Solved: ...

  2. bzoj千题计划105:bzoj3503: [Cqoi2014]和谐矩阵(高斯消元法解异或方程组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3503 b[i][j] 表示i对j是否有影响 高斯消元解异或方程组 bitset优化 #include ...

  3. BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )

    偶数个相邻, 以n*m个点为变量, 建立异或方程组然后高斯消元... O((n*m)^3)复杂度看起来好像有点大...但是压一下位的话就是O((n*m)^3 / 64), 常数小, 实际也跑得很快. ...

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

    BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元 题意: 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本身,及他上下左右的4个元素(如果 ...

  5. 3503: [Cqoi2014]和谐矩阵

    3503: [Cqoi2014]和谐矩阵 链接 分析: 对于每个点,可以列出一个方程a[i][j]=a[i][j-1]^a[i][j+1]^a[i-1][j]^a[i+1][j],于是可以列出n*m个 ...

  6. P3164 [CQOI2014]和谐矩阵

    P3164 [CQOI2014]和谐矩阵 乱写能AC,暴力踩标程(雾 第一眼 诶这题能暴力枚举2333!!! 第二眼 诶这题能高斯消元!那只需要把每个位置的数给设出来就能够列方程了!然后就可以\(O( ...

  7. 【BZOJ】【3503】【CQOI2014】和谐矩阵

    高斯消元解Xor方程组 Orz ZYF o(︶︿︶)o 唉我的数学太烂了…… 错误思路:对每个格点进行标号,然后根据某5个异或和为0列方程组,高斯消元找自由元……(目测N^3会TLE) ZYF的正确思 ...

  8. BZOJ3503:[CQOI2014]和谐矩阵(高斯消元,bitset)

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

  9. BZOJ3503: [Cqoi2014]和谐矩阵

    题解: 如果第一行的数知道了,我们就可以推出其他行的数. 那么如何判断第一行的数的一种填法是否合法呢?很简单,我们递推出m+1行的数,当且仅当这一行都是0时满足题意. 那么,我们就有了一种想法. 直接 ...

随机推荐

  1. 51nod算法马拉松28-c

    题解: 按照每一个要求,分类讨论,讨论压下去了多少 代码: #include<bits/stdc++.h> using namespace std; ,N=; int n,A,B,C,an ...

  2. MyEclipse WebSphere开发教程:安装和更新WebSphere 6.1, JAX-WS, EJB 3.0(五)

    MyEclipse超值折扣 限量 100 套! 立即开抢>> [MyEclipse最新版下载] MyEclipse支持Java EE技术(如JAX-WS和EJB 3.0),它们以功能包的形 ...

  3. SWIFT中用Switch case 类类型

    有时觉得SWIFT的语法真的强大而又变态,不说了,直接上代码瞅瞅: 首先先定义一个交通工具的父类 class Vehicle{ var wheels:Int! var speed:Double! in ...

  4. 京东Java面试题(二)

    1.set集合从原理上如何保证不重复 1)在往set中添加元素时,如果指定元素不存在,则添加成功.也就是说,如果set中不存在(e==null ? e1==null : e.queals(e1))的元 ...

  5. 【linux基础】core dump debug

    1.check core dump; ulimit -c or ulimit -a nvidia@tegra-ubuntu:~$ ulimit -a core data seg size (kbyte ...

  6. 从 0 到 1 合理高效使用 GitHub 的资料

    来自:https://github.com/xirong/my-git/blob/master/how-to-use-github.md 说明 作为一名开发者,Github上面有很多东西值得关注学习, ...

  7. AHK教程 - imsoft.cnblogs

    转自:小弗兰茨 AHK,就是传说中的 Auto Hot Key .什么?没有听说过?那么很正常……它运行在Windows下.总之,AHK可以赋予你对你的电脑的无与伦比的控制力.一些人想要在MM面前展示 ...

  8. CodeForces - 325E:The Red Button (哈密尔顿 转 欧拉回路)

    Piegirl found the red button. You have one last chance to change the inevitable end. The circuit und ...

  9. 使用 WPF 开发一个 Windows 屏幕保护程序

    最近有小伙伴问我如何可以让 Windows 静置一段时间不操作之后,显示一个特殊的界面.我想了想,屏幕保护程序可以做到这一点,而且,屏幕保护程序的开发也是非常简单的. 本文将介绍如何为 Windows ...

  10. django所遇到问题简单总结

    问题虽小,但却值得深思 一.改mysql密码 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = ...