如果确定了第一行,那么可以推出来整个矩阵,矩阵合法的条件是n+1行全是0

所以推出来n+1行和1行的关系,然后用异或高斯消元来解即可

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. const int N=45;
  5. int n,m,f[N][N][N],a[N][N],ans[N][N];
  6. void gaosi()
  7. {
  8. for(int i=1;i<=m;i++)
  9. {
  10. int nw=i;
  11. while(!a[nw][i]&&nw<=m)
  12. nw++;
  13. if(nw>m)
  14. continue;
  15. if(nw!=i)
  16. for(int k=1;k<=m;k++)
  17. swap(a[nw][k],a[i][k]);
  18. for(int j=1;j<=m;j++)
  19. if(j!=i&&a[j][i])
  20. for(int k=1;k<=m;k++)
  21. a[j][k]^=a[i][k];
  22. }
  23. }
  24. int main()
  25. {
  26. scanf("%d%d",&n,&m);
  27. for(int i=1;i<=m;i++)
  28. f[1][i][i]=1;
  29. for(int i=2;i<=n+1;i++)
  30. for(int j=1;j<=m;j++)
  31. for(int k=1;k<=m;k++)
  32. f[i][j][k]=f[i-1][j-1][k]^f[i-1][j][k]^f[i-1][j+1][k]^f[i-2][j][k];
  33. for(int i=1;i<=m;i++)
  34. for(int j=1;j<=m;j++)
  35. a[i][j]=f[n+1][i][j];
  36. gaosi();
  37. for(int i=m;i>=1;i--)
  38. {
  39. if(!a[i][i])
  40. ans[1][i]=1;
  41. else
  42. for(int j=i+1;j<=m;j++)
  43. if(a[i][j])
  44. ans[1][i]^=ans[1][j];
  45. }
  46. for(int i=2;i<=n;i++)
  47. for(int j=1;j<=m;j++)
  48. ans[i][j]=ans[i-1][j]^ans[i-1][j-1]^ans[i-1][j+1]^ans[i-2][j];
  49. for(int i=1;i<=n;i++)
  50. {
  51. for(int j=1;j<=m;j++)
  52. printf("%d ",ans[i][j]);
  53. puts("");
  54. }
  55. return 0;
  56. }

bzoj 3503: [Cqoi2014]和谐矩阵【高斯消元】的更多相关文章

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

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

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

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

  3. P3164 [CQOI2014]和谐矩阵(高斯消元 + bitset)

    题意:构造一个$n*m$矩阵 使得每个元素和上下左右的xor值=0 题解:设第一行的每个元素值为未知数 可以依次得到每一行的值 然后把最后一行由题意条件 得到$m$个方程 高斯消元解一下 bitset ...

  4. BZOJ 3503 [CQOI2014]和谐矩阵

    题目链接 BZOJ 3503 题解 没想到--直接用暴力的\(O((nm)^3)\)算法,居然能过?! 高斯消元解异或方程组. #include <cstdio> #include < ...

  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. [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash)

    [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash) 题面 扔很多次硬币后,用H表示正面朝上,用T表示反面朝上,会得到一个硬币序列.比如HTT表示第一次正面朝上, ...

  7. BZOJ 3143 HNOI2013 游走 高斯消元 期望

    这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...

  8. BZOJ 2337 XOR和路径 | 高斯消元 期望 位运算

    BZOJ 2337 XOR和路径 题解 这道题和游走那道题很像,但又不是完全相同. 因为异或,所以我们考虑拆位,分别考虑每一位: 设x[u]是从点u出发.到达点n时这一位异或和是1的概率. 对于所有这 ...

  9. 矩阵&&高斯消元

    矩阵运算: \(A\times B\)叫做\(A\)左乘\(B\),或者\(B\)右乘\(A\). 行列式性质: \(1.\)交换矩阵的两行(列),行列式取相反数. \(2.\)某一行元素都\(\ti ...

随机推荐

  1. Back弹出AlertDialog

    package com.pingyijinren.helloworld.activity; import android.content.DialogInterface; import android ...

  2. Linux下增加User及添加sudo权限

    运行adduser username 会默认建立同名的user,group,同时会要求输入用户密码及一些属性,完成之后OK. sudo chmod +w /etc/sudoers vi /etc/su ...

  3. React学习及实例开发(三)——用react-router跳转页面

    本文基于React v16.4.1 初学react,有理解不对的地方,欢迎批评指正^_^ 一.定义路由 1.安装react-router npm install react-router@ --sav ...

  4. Jquery操作事件

    1.文档加载事件 2.DOM单击双击事件 3.DOM获得焦点,失去焦点问题 4.DOM鼠标移入,移出事件 <!DOCTYPE html> <html> <head> ...

  5. Anagrams(hash表)

    Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...

  6. Multiply Strings(字符串乘法模拟,包含了加法模拟)

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  7. HDU 2059 【DP】

    题意: 中文. 思路: 这题不是自己的思想. 当对第i个点的最优值进行求解的时候一定存在最后一个加油的点j.这里j直接枚举. 另外将0和n+1个加油站定义为起点和终点. dp需要加强训练. #incl ...

  8. Java并发包——线程安全的Collection相关类

    Java并发包——线程安全的Collection相关类 摘要:本文主要学习了Java并发包下线程安全的Collection相关的类. 部分内容来自以下博客: https://www.cnblogs.c ...

  9. Java中文件和I/O

    以下内容引用自http://wiki.jikexueyuan.com/project/java/files-and-io.html: 在Java中java.io包含的每一个类几乎都要进行输入和输出操作 ...

  10. 【神乎其神】这些EXCEL技巧,太神奇了,赶紧收藏!

    转:http://learning.sohu.com/20160215/n437421658.shtml