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个方程,高斯消元,复杂度$O(n^3m^3)$。可以再bitset优化一下。
还有一种复杂度更优的做法:如果知道了第一行,那么整个矩阵都可以推出来了,即每个点可以有第一行的几个位置异或得到。
所以可以推出每一行每个点,与第一行的那些点有关系,推得时候转化以下上面的式子,使得每一个点只与上面的行有关系。
由于第n+1行只能全部是0,所以可以推出第n+1行每个点与第一行每个点的关系,然后列出m个方程,高斯消元,复杂度$O(m^3)$。
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ;
LL a[N][N], b[N][N], c[N][N];
int n, m; void Gauss() {
for (int k = ; k <= m; ++k) {
int r = k;
while (r <= m && !a[r][k]) r ++;
if (r > m) continue;
if (r != k) for (int j = ; j <= m; ++j) swap(a[k][j], a[r][j]);
for (int i = k + ; i <= m; ++i)
if (a[i][k]) for (int j = ; j <= m; ++j) a[i][j] ^= a[k][j];
}
for (int i = m; i; --i) {
if (!a[i][i]) { c[][i] = ; continue; }
c[][i] = a[i][m + ];
for (int j = i + ; j <= m; ++j) if (a[i][j]) c[][i] ^= c[][j];
}
}
int main() {
n = read(), m = read();
for (int i = ; i <= m; ++i) b[][i] = (1ll << (i - ));
for (int i = ; i <= n + ; ++i)
for (int j = ; j <= m; ++j)
b[i][j] = b[i - ][j - ] ^ b[i - ][j] ^ b[i - ][j + ] ^ b[i - ][j];
for (int i = ; i <= m; ++i)
for (int j = ; j <= m; ++j) a[i][j] = (b[n + ][i] >> (j - )) & ;
Gauss();
for (int i = ; i <= n; ++i)
for (int j = ; j <= m; ++j)
c[i][j] = c[i - ][j - ] ^ c[i - ][j] ^ c[i - ][j + ] ^ c[i - ][j];
for (int i = ; i <= n; ++i, puts(""))
for (int j = ; j <= m; ++j) printf("%lld ", c[i][j]);
return ;
}
3503: [Cqoi2014]和谐矩阵的更多相关文章
- BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )
偶数个相邻, 以n*m个点为变量, 建立异或方程组然后高斯消元... O((n*m)^3)复杂度看起来好像有点大...但是压一下位的话就是O((n*m)^3 / 64), 常数小, 实际也跑得很快. ...
- BZOJ 3503 [CQOI2014]和谐矩阵
题目链接 BZOJ 3503 题解 没想到--直接用暴力的\(O((nm)^3)\)算法,居然能过?! 高斯消元解异或方程组. #include <cstdio> #include < ...
- bzoj 3503: [Cqoi2014]和谐矩阵【高斯消元】
如果确定了第一行,那么可以推出来整个矩阵,矩阵合法的条件是n+1行全是0 所以推出来n+1行和1行的关系,然后用异或高斯消元来解即可 #include<iostream> #include ...
- 【高斯消元】BZOJ3503 [Cqoi2014]和谐矩阵
3503: [Cqoi2014]和谐矩阵 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1197 Solved: ...
- bzoj千题计划105:bzoj3503: [Cqoi2014]和谐矩阵(高斯消元法解异或方程组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3503 b[i][j] 表示i对j是否有影响 高斯消元解异或方程组 bitset优化 #include ...
- BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元
BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元 题意: 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本身,及他上下左右的4个元素(如果 ...
- P3164 [CQOI2014]和谐矩阵
P3164 [CQOI2014]和谐矩阵 乱写能AC,暴力踩标程(雾 第一眼 诶这题能暴力枚举2333!!! 第二眼 诶这题能高斯消元!那只需要把每个位置的数给设出来就能够列方程了!然后就可以\(O( ...
- BZOJ3503:[CQOI2014]和谐矩阵(高斯消元,bitset)
Description 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本 身,及他上下左右的4个元素(如果存在). 给定矩阵的行数和列数,请计算并输 ...
- Luogu3164 CQOI2014 和谐矩阵 异或高斯消元
传送门 题意:给出$N,M$,试构造一个$N \times M$的非全$0$矩阵,其中所有格子都满足:它和它上下左右四个格子的权值之和为偶数.$N , M \leq 40$ 可以依据题目中的条件列出有 ...
随机推荐
- npm run dev时报错“events.js:160 throw er; // Unhandled 'error' event”
经查,此问题由端口占用导致,node服务器默认端口8080已被其他程序占用,关闭占用端口的程序或者修改node服务器的默认端口即可解决此问题
- 模板与STL学习简单的笔记
一.如何进行泛型编程 C/C++是一种静态编程语言,必须需要把代码翻译成可执行的二进制可执行程序然后再运行,一旦编译好之后就不能再变了(数据类型也就必须确定下无法更改,因此要为每一种数据类型编写一份算 ...
- 关于springMVC的一些常用注解
①:@RequestMapping("/helloworld").@RequestMapping(value="/emp", method=RequestMet ...
- 使用GPUImage渲染图片教程
使用GPUImage渲染图片教程 Prepare - 准备 GPUImage开源库并不像普通的开源库那样子,拖进你的工程中就可以用.以下将详细的告诉你如何将GPUImage导入到你的工程当中. 首先上 ...
- 1.4 Installation and Setup(安装和设置)
1.4 Installation and Setup(安装和设置) 这里我们用Anaconda发行版作为Python的使用环境,推荐安装Python3.6,本书就是用Python3.6代码写成的.(译 ...
- 我做的一个websocket的demo(php server)
notice: 通过命令行执行php文件 如 php -q c:\path\server.php 通过本地web服务器访问 http://127.0.0.1/websocket/index.php即 ...
- 02.Java入门
Java 是SUN(Starfard University Network)公司在1995年开发的一门完全面向对象的,开源的高级编程语言. Java的发展历史 1995年诞生,1996年发布第一个版本 ...
- Java NIO(一)I/O模型概述
基本概念讲述 什么是同步? 同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行. 什么是异步? 异步就是 ...
- Day16 IO流
流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. Ja ...
- --provider=docker时出现的问题
Vagrantfile类似: Vagrant.configure(") do |config| config.vm.box = "hashicorp/precise64" ...