说在前面

蓝书第一章有道例题和这个题有相似之处,me在做这道题的时候思路就被带过去了=A=
然而终究是没有想出正解…最后用找规律+暴力水了75分=w=


题目

BZOJ3503传送门

题面

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

输入输出格式

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

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


解法

手动模拟几组小数据,可以发现一个性质,一旦一个矩阵的第一行被确定,这个矩阵就确定下来了。
先写出第一行,第二行需要满足第一行,第三行需要满足第二行….最后第N行满足第N-1行,并且第N行还需要自我满足。暴力也就是这个做法,枚举第一行,check最后一行,时间复杂度是Θ(2M∗M∗N)\Theta(2^M*M*N)的,比直接暴搜要快很多

当然肯定不能满足于此,需要寻找一个通性通法来优化上面的思路。
如果把第一行的元素写成x1,x2,⋯,xMx_1,x_2,\cdots, x_M,那么第二行的元素就应该是 (x1⊕x2),(x1⊕x2⊕x3),⋯,(xM−1⊕xM)(x_1 \oplus x_2),(x_1\oplus x_2\oplus x_3),\cdots ,(x_{M-1}\oplus x_M)以此类推,一直推到第N+1行。因为第N+1行本来是不存在的,在异或意义下相当于0,那么就可以列出M个方程,从而解得第一行元素的值,整个矩阵也就确定了

为了防止解出全0的情况,可以把方程中的自由元全部都设为1(题目保证了有解)
时间复杂度Θ(N∗M2+M3)\Theta(N*M^2+M^3)


下面是自带大常数的代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;int M , N , mx[45][45][45] , a[45][45] , ans[45][45] ;void Gauss(){for( int i = 1 ; i <= M ; i ++ ){if( !a[i][i] ){for( int j = i ; j <= M ; j ++ )if( a[j][i] ){for( int k = 1 ; k <= M ; k ++ )swap( a[j][k] , a[i][k] ) ;break ;}}if( a[i][i] == 0 ){a[i][i] = a[i][M+1] = 1 ;continue ;}for( int j = i + 1 ; j <= M ; j ++ ){if( !a[j][i] ) continue ;for( int k = i ; k <= M ; k ++ )a[j][k] = ( a[j][k] - a[i][k] + 2 )&1 ;}}for( int i = M ; i ; i -- ){ans[1][i] = a[i][M+1] ;for( int j = i - 1 ; j >= 1 ; j -- )if( a[j][i] ) a[j][M+1] = ( a[j][M+1] - a[i][M+1] + 2 )&1 ;}
}void fill_mx(){for( int i = 2 ; i <= N ; i ++ )for( int j = 1 ; j <= M ; j ++ ){int las = ans[i-1][j] + ans[i-1][j-1] + ans[i-1][j+1] + ans[i-2][j] ;ans[i][j] = ( las&1 ) ;}
}void print(){for( int i = 1 ; i <= N ; i ++ ){for( int j = 1 ; j <= M ; j ++ )printf( "%d " , ans[i][j] ) ;puts("") ;}
}void solve(){for( int i = 1 ; i <= M ; i ++ )mx[1][i][i] = 1 ;for( int i = 2 ; i <= N+1 ; i ++ )for( int j = 1 ; j <= M ; j ++ )for( int k = 1 ; k <= M ; k ++ ){mx[i][j][k] += mx[i-1][j-1][k] + mx[i-1][j][k] + mx[i-1][j+1][k] + mx[i-2][j][k] ;mx[i][j][k] &= 1 ;}for( int j = 1 ; j <= M ; j ++ )for( int k = 1 ; k <= M ; k ++ ){a[j][k] = mx[N+1][j][k] ;a[j][k] &= 1 ;}Gauss() ;fill_mx() ;print() ;
}int main(){scanf( "%d%d" , &N , &M ) ;solve() ;
}

[BZOJ3503]-[CQOI2014]和谐矩阵-高斯消元相关推荐

  1. 【BZOJ3503】【Cqoi2014】和谐矩阵 高斯消元,解异或方程组

    #include <stdio.h> int main() {puts("转载请注明出处");puts("地址:blog.csdn.net/vmurder/a ...

  2. bzoj3503: [Cqoi2014]和谐矩阵

    高斯消元解异或方程组.学了bitset.对比如下 #include<cstdio> #include<cstring> #include<iostream> #in ...

  3. POJ 1830 开关问题 【01矩阵 高斯消元】

    任意门:http://poj.org/problem?id=1830 开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1 ...

  4. pku 1830 开关问题(构造矩阵+高斯消元)

    开关问题 Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4653   Accepted: 1675 Description ...

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

    3503: [Cqoi2014]和谐矩阵 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge Submit: 1101  Solved ...

  6. 矩阵树 Matrix-Tree 定理实现模板(高斯消元求解行列式)

    大佬1博客:https://www.cnblogs.com/zj75211/p/8039443.html 大佬2博客:https://www.cnblogs.com/yangsongyi/p/1069 ...

  7. CF446D-DZY Loves Games【高斯消元,矩阵乘法】

    正题 题目链接:https://www.luogu.com.cn/problem/CF446D 题目大意 给出nnn个点mmm条边的一张无向图,一些点有陷阱,走到时会损失一条生命,总共有kkk条生命, ...

  8. 计算矩阵的逆和行列式的值(高斯消元+LU分解)

    计算矩阵的逆 选主元的高斯消元法 朴素的高斯消元法是将矩阵A和单位矩阵放在一起,通过行操作(或者列操作)将A变为单位矩阵,这个时候单位矩阵就是矩阵A的逆矩阵.从上到下将A变为上三角矩阵的复杂度为O(n ...

  9. BZOJ_1778_[Usaco2010_Hol]_Dotp_驱逐猪猡_(期望动态规划+高斯消元+矩阵)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1778 炸弹从1出发,有\(\frac{P}{Q}\)的概率爆炸,如果不爆炸,等概率移动到连通的 ...

  10. 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元

    题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...

最新文章

  1. U3D架构系列之- FSM有限状态机设计五
  2. 用Javascript模拟微信飞机大战游戏
  3. Flutter开发之ListView组件(21)
  4. 人工智能历经风雨二十载 AI专用芯片成蓝海
  5. Android Studio 第六十五期 - Android业务组件库
  6. luogu P2572 [SCOI2010]序列操作
  7. 关于setTimeout
  8. HDU - 4388 Stone Game II(博弈+思维)
  9. 查看操作系统和处理器的位数
  10. eviews建立时间序列模型_Eviews教程 Eviews进行时间序列分析教程
  11. 《VP9 Video Codec》Overview
  12. CNN实现简单语音识别(单词识别)
  13. PPT设计思维进阶:提升设计能力
  14. Django站点通过系统部署到线上
  15. SAP GUI750 双击创建子例程没反应,补丁下载
  16. 零基础学python实战答案-Python3.6零基础入门与实战 PDF 带源码视频版
  17. 蜂房问题-蜜蜂在蜂房中只能向下或者右上方爬,从a位置爬到b位置有多少种途径
  18. 你一念之差,我动情一场:伤感日志
  19. Leetcode 1647. Minimum Deletions to Make Character Frequencies Unique [Python]
  20. vue——一个页面实现音乐播放器

热门文章

  1. 有道云笔记不同步_有道云笔记不能无法同步解决教程
  2. 前端预览pdf文件流
  3. TOM企业邮箱,为你打造企业专属邮箱
  4. 如何在word中一次性删除硬回车或软回车
  5. EndNote X9配置Chinese Standard GBT7714
  6. Github 单文件快速下载 -- 使用 DownGit
  7. spring @lazy注解的使用
  8. RGB、HSL、Hex网页色彩,看完这篇全懂了
  9. 2020淘宝双十一快速刷金币工具
  10. 一款经典的 jQuery Lightbox 灯箱效果