高斯消元解Xor方程组

Orz ZYF o(︶︿︶)o 唉我的数学太烂了……

错误思路:对每个格点进行标号,然后根据某5个异或和为0列方程组,高斯消元找自由元……(目测N^3会TLE)

ZYF的正确思路:

如果第一行的数知道了,我们就可以推出其他行的数。

那么如何判断第一行的数的一种填法是否合法呢?很简单,我们递推出m+1行的数,当且仅当这一行都是0时满足题意。

那么,我们就有了一种想法。

直接把m+1行的每个数用x[1..n]表示出来,这一定是个系数只为0/1的式子。然后让这个异或值=0,就可以解异或方程组了。

有个奇怪错误:将long long 直接转成bitset会有位数丢了……只能一位一位往过转= =

  1. /**************************************************************
  2. Problem: 3503
  3. User: Tunix
  4. Language: C++
  5. Result: Accepted
  6. Time:56 ms
  7. Memory:1292 kb
  8. ****************************************************************/
  9.  
  10. //BZOJ 3503
  11. #include<bitset>
  12. #include<cstdio>
  13. #include<cstring>
  14. #include<cstdlib>
  15. #include<iostream>
  16. #include<algorithm>
  17. #define rep(i,n) for(int i=0;i<n;++i)
  18. #define F(i,j,n) for(int i=j;i<=n;++i)
  19. #define D(i,j,n) for(int i=j;i>=n;--i)
  20. using namespace std;
  21. int getint(){
  22. int v=,sign=; char ch=getchar();
  23. while(ch<''||ch>''){ if (ch=='-') sign=-; ch=getchar();}
  24. while(ch>=''&&ch<=''){ v=v*+ch-''; ch=getchar();}
  25. return v*=sign;
  26. }
  27. /******************tamplate*********************/
  28. const int N=;
  29. int n,m;
  30. typedef long long LL;
  31. LL b[N][N];
  32. bitset<N>a[N],c[N];
  33.  
  34. void gauss(){//准确的说这是高斯-约当消元法?
  35. F(i,,n+){
  36. int j=i;
  37. while(j<=n && !a[j][i]) j++;
  38. if(j>n) continue;//如果这一位全是0……(自由元)
  39. if(i!=j) swap(a[i],a[j]);
  40. F(j,,n)
  41. if(i!=j && a[j][i]) a[j]^=a[i];
  42. }
  43. }
  44. int main(){
  45. ios::sync_with_stdio(false);
  46. m=getint(); n=getint();
  47.  
  48. F(i,,n) b[][i]=(LL)<<i-;
  49.  
  50. F(i,,m+)
  51. F(j,,n)
  52. b[i][j]=b[i-][j]^b[i-][j-]^b[i-][j+]^b[i-][j];
  53. F(i,,n)
  54. F(j,,n)
  55. a[i][j]=b[m+][i]>>(j-)&;
  56. // a[i]=b[m+1][i],a[i]<<=1; 这里不能这样直接转bitset,否则会出错sad
  57.  
  58. //b[m+1][i]的意义是:
  59. //若使b[m+1][i]为0,则第一行的哪几个异或起来和为0
  60. gauss();
  61. D(i,n,){
  62. c[][i]=a[i][n+];
  63. if(!a[i][i]){c[][i]=; continue;}//令自由元为1(以保证矩阵不全为0)
  64. F(j,i+,n) if (a[i][j]) c[][i]=c[][i]^c[][j];
  65. }//解出第一行的0/1情况
  66. F(i,,m)
  67. F(j,,n)
  68. c[i][j]=c[i-][j]^c[i-][j-]^c[i-][j+]^c[i-][j];
  69. F(i,,m){
  70. F(j,,n-) cout <<c[i][j]<<" ";
  71. cout <<c[i][n]<<endl;
  72. }
  73. return ;
  74. }

3503: [Cqoi2014]和谐矩阵

Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge
Submit: 484  Solved: 212
[Submit][Status][Discuss]

Description

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

Input

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

Output

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

Sample Input

4 4

Sample Output

0100
1110
0001
1101

数据范围
1 <=m, n <=40

HINT

Source

[Submit][Status][Discuss]

【BZOJ】【3503】【CQOI2014】和谐矩阵的更多相关文章

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

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

  2. BZOJ 3503 [CQOI2014]和谐矩阵

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

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

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

  4. 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个 ...

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

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

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

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

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

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

  8. P3164 [CQOI2014]和谐矩阵

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

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

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

  10. Luogu3164 CQOI2014 和谐矩阵 异或高斯消元

    传送门 题意:给出$N,M$,试构造一个$N \times M$的非全$0$矩阵,其中所有格子都满足:它和它上下左右四个格子的权值之和为偶数.$N , M \leq 40$ 可以依据题目中的条件列出有 ...

随机推荐

  1. java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher

    java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher 出现以上异常,可能是使用Json缺少ezmorph包: 以下是Json常用的包:ezm ...

  2. Anaconda 安装好了,却无法运行?

    使用管理员运行:conda prompt 或者 Windows PowerShell 执行命令 conda update anaconda-navigator 还是不行就试试命令: anaconda- ...

  3. html+css制作五环(代码极简)

    五环 把五环做成一个浮动,总是位于屏幕中央的效果. 难点 定位的练习 position :fixed 位于body中间的时候 left:50%:top:50%; css内部样式表的使用 style=& ...

  4. DRUID控制

    @Configuration public class DruidConfiguration { @Bean public ServletRegistrationBean statViewServle ...

  5. web服务端安全之SQL注入攻击

    一.SQL注入攻击的原理攻击者在HTTP请求中,注入恶意的SQL代码,并在服务端执行.比如用户登录,输入用户名camille,密码 ' or '1'='1 ,如果此时使用参数构造的方式,就会出现 ' ...

  6. keystone 认证深度研究分析

    一.Keystone Token深度概述 Keystone作为OpenStack项目基础认证模块,目前支持的token类型分别是uuid.pkiz.pki.fernet. 首先,简要叙述一下这四种类型 ...

  7. Atcoder681 Typical DP Contest E.数 数位dp

    写什么递归....非递归多好写 令$f[i][j]$表示前$i$位的和在模$d$意义下为$j$的方案数,然后转移即可 复杂度$O(10000 * 100 * 10)$ 注意非递归建议高位摆第$n$位. ...

  8. flask 中 session的源码解析

    1.首先请求上下文和应用上下文中已经知道session是一个LocalProxy()对象 2.然后需要了解整个请求流程, 3.客户端的请求进来时,会调用app.wsgi_app(),于此此时,会生成一 ...

  9. oracle_创建表空间、用户、授权等步骤

    --创建表空间(在system用户下才可以创建) //connect system/manager as sysdba:切换到system用户 create tablespace tz datafil ...

  10. 华为S5300系列升级固件S5300SI-V100R005C00SPC100.cc

    这个固件附带了web,注意,这个插件是升级V200的必经固件,所以必须升级为此固件之后才能往下升级. 升级小插曲: 1.升级的使用使用Windows,不要用Mac或者Linux,因为从Mac/Linu ...